Сохранить форму после группового - PullRequest
1 голос
/ 29 марта 2019

Хорошо, допустим, у меня есть df - частота животных в разных домах:

   Animal  Frequency
0  Dog     5
1  Cat     7
2  Cat     2
3  Fish    2
4  Dog     8

Теперь давайте скажем, что мне все равно, в каком домохозяйстве, я просто хочу, чтобы среднее значение каждого животного отображалось под частотой, поэтому я получаю среднее значение с помощью:

mean = df.groupby(['Animal']).mean()

Теперь это дает мне серию (или блок данных в моем фактическом большем df) с индексом в качестве разных животных:

      Frequency
Dog     6.5
Cat     4.5
Fish    2

Теперь я просто хочу, чтобы мой оригинальный df был:

   Animal  Frequency
0  Dog     6.5
1  Cat     4.5
2  Cat     4.5
3  Fish    2
4  Dog     6.5

Попытка с использованием встроенного цикла for (Помните, мой реальный проект означает, что среднее значение возвращает кадр данных, а не серию):

for idx in df.index:
    for item in mean.Animal:    
        if df.Animal[idx] == mean.Animal[item]:
            df.at[idx, 'Frequency'] = mean.at[item, 'Frequency']

Приведенный выше код выполняется бесконечно долго, фактический фрейм данных очень большой.

1 Ответ

1 голос
/ 29 марта 2019

Используйте GroupBy.transform, чтобы сохранить исходную форму после агрегирования со средним значением:

df['Frequency'] = df.groupby('Animal').transform('mean')

Выход

   Animal  Frequency
0    Dog        6.5
1    Cat        4.5
2    Cat        4.5
3   Fish        2.0
4    Dog        6.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...