Есть ли способ разгруппировать фрейм данных groupby с добавлением дополнительного столбца - PullRequest
1 голос
/ 20 января 2020

Предположим, мы берем pandas фрейм данных ...

    item  MRP     sold
0   A     10       10
1   A     36       4
2   B     32       6
3   A     26       7
4   B     30       9

Затем делаем groupby('item').mean()

становится

   item  MRP     sold
0   A     24      7
1   B     31      7.5

Есть ли способ сохранить средние значения ППМ для всех уникальных элементов и создать еще один столбец, который будет содержать эти значения в разгруппированном виде.

В основном я хочу получить

    item  MRP     sold  Mean_MRP
0   A     10       10    24
1   A     36       4     24
2   B     32       6     31
3   A     26       7     24
4   B     30       9     31

Существует много предметы, поэтому мне нужен более быстрый и оптимизированный способ сделать это

Ответы [ 2 ]

3 голосов
/ 20 января 2020

Используйте функцию Преобразование :

df = (df
      .assign(Mean_MRP = lambda x:x.groupby('item')['MRP']
                                   .transform('mean')))

df


  item  MRP     sold    Mean_MRP
0   A   10      10       24
1   A   36      4        24
2   B   32      6        31
3   A   26      7        24
4   B   30      9        31

Вы также можете использовать модуль pyjanitor , который делает код немного чище:

import janitor

df.groupby_agg(by='item',
               agg='mean',
               agg_column_name="MRP",
               new_column_name='Mean_MRP')
3 голосов
/ 20 января 2020

Попробуйте использовать transform:

df['Mean_MRP'] = df.groupby('item').transform('mean')
...