Чтобы получить результаты, выполненные для групповых данных с тем же уровнем детализации, что и в исходном кадре данных (тот же счетчик наблюдений), я использовал функцию преобразования.
Пример:
Исходный кадр данных
name, year, grade
Jack, 2010, 6
Jack, 2011, 7
Rosie, 2010, 7
Rosie, 2011, 8
После группового преобразования
name, year, grade, average grade
Jack, 2010, 6, 6.5
Jack, 2011, 7, 6.5
Rosie, 2010, 7, 7.5
Rosie, 2011, 8, 7.5
Однако с более сложными функциями, основанными на нескольких столбцах, все становится сложнее. Что меня удивляет, так это то, что я, кажется, не могу получить доступ к нескольким столбцам в комбинации группового преобразования.
df = pd.DataFrame({'a':[1,2,3,4,5,6],
'b':[1,2,3,4,5,6],
'c':['q', 'q', 'q', 'q', 'w', 'w'],
'd':['z','z','z','o','o','o']})
def f(x):
y=sum(x['a'])+sum(x['b'])
return(y)
df['e'] = df.groupby(['c','d']).transform(f)
Дает мне:
KeyError: ('a', 'occurred at index a')
Хотя я знаю, что работает следующее:
df.groupby(['c','d']).apply(f)
Что вызывает такое поведение и как я могу получить что-то вроде этого:
a b c d e
1 1 q z 12
2 2 q z 12
3 3 q z 12
4 4 q o 8
5 5 w o 22
6 6 w o 22