【发布时间】:2019-04-12 05:48:27
【问题描述】:
为了获得在 groupby-data 上执行的结果,其细节级别与原始 DataFrame 相同(观察计数相同),我使用了 transform 函数。
示例: 原始数据框
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
但是,对于基于多列的更高级功能,事情变得更加复杂。令我困惑的是,我似乎无法访问 groupby-transform 组合中的多个列。
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
【问题讨论】:
-
看看这个answer它可能会帮助你理解为什么
-
我观察到通过在函数 f 中使用 print(x),列变成了标量。但是我该如何克服呢?
标签: python pandas pandas-groupby