Pandas groupby операции

Имея определенный df:

Start  End   N   Count  Avg 
1      abc1  10    2    .5
1      abc2  10    2    .5
1      xyz1  10    2    .5
1      xyz2  10    2    .5  
1      ijk1  10    2    .5
2      abc1  12    3    .4
2      xyz1  12    1    .1
2      xyz2  12    1    .4
2      ijk1  12    6    .5 
2      ijk2  12    1    .7

Моя цель - сгруппировать все xyz ... в 1 группу и ijk в 1 группу. Затем просуммируйте счетчик и возьмите среднее значение Avg.

Start  End   N   Count  Avg 
1      abc1  10    2    .5
1      abc2  10    2    .5
1      xyz   10    4    .5
1      ijk   10    2    .5
2      abc1  12    3    .4
2      xyz   12    2    .25
2      ijk   12    7    .6

Я пробовал df.groupby (). Agg (sum), но у меня с этим две проблемы:

Я не хочу группировать abc .. все, что угодно с ijk и xyz

Я хочу контролировать сумму и среднее значение отдельно, зависит от названия поля

Есть мысли? Большое спасибо!

1
0
82
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно сгруппировать по строковой части столбца End и использовать agg

df[df['End'].str.contains('ijk|xyz')]\
.groupby(['Start', df['End'].str.extract('([A-Za-z]+)', expand = False)])\
.agg({'Count': 'sum', 'Avg': 'mean'})

             Count  Avg
Start   End     
1       ijk  2      0.50
        xyz  4      0.50
2       ijk  7      0.60
        xyz  2      0.25

Примечание. Вы можете упростить код, чтобы извлечь строку из столбца End, если нужно исключить только одно число. Что-то вроде,

df[df['End'].str.contains('ijk|xyz')]\
.groupby(['Start', df['End'].str[:-1]])\
.agg({'Count': 'sum', 'Avg': 'mean'})

Сброс индекса

df[df['End'].str.contains('ijk|xyz')]\

.groupby (['Начало', df ['Конец']. str [: - 1]]) \ .agg ({'Количество': 'сумма', 'Среднее': 'среднее'}). reset_index ()

    Start   End Count   Avg
0   1       ijk 2   0.50
1   1       xyz 4   0.50
2   2       ijk 7   0.60
3   2       xyz 2   0.25

Спасибо за помощь. Как в этом случае сбросить весь индекс? Было бы просто df.reset_index? Потому что мне нужно было бы объединить это с исходным df

TylerNG 27.03.2018 02:13

Да, reset_index лучше всего подходит для сброса индекса

Vaishali 27.03.2018 02:16

Можешь еще раз проверить? Здесь все работает нормально. Я только что обновил ответ

Vaishali 27.03.2018 02:22

Другие вопросы по теме