Имея определенный 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
Я хочу контролировать сумму и среднее значение отдельно, зависит от названия поля
Есть мысли? Большое спасибо!

Вам нужно сгруппировать по строковой части столбца 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
Да, reset_index лучше всего подходит для сброса индекса
Можешь еще раз проверить? Здесь все работает нормально. Я только что обновил ответ
Спасибо за помощь. Как в этом случае сбросить весь индекс? Было бы просто df.reset_index? Потому что мне нужно было бы объединить это с исходным df