为了在groupby数据上获得与原始数据帧相同的细节级别(相同的观察计数),我使用了transform函数。在
示例: 原始数据帧
name, year, grade
Jack, 2010, 6
Jack, 2011, 7
Rosie, 2010, 7
Rosie, 2011, 8
在groupby变换之后
^{pr2}$然而,随着基于多个列的更高级的函数,事情变得更加复杂。让我困惑的是,我似乎无法访问groupby转换组合中的多个列。在
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
对于这种特殊情况,您可以:
如果您可以在同一groupby上通过独立变换的线性组合来构造最终结果,那么这个方法就可以工作了。在
否则,您将使用
groupby-apply
,然后合并回原始df。在示例:
^{pr2}$您可以将
GroupBy
+transform
与sum
一起使用两次:相关问题 更多 >
编程相关推荐