我有一个数据帧,看起来像这样:
A B C D
1 10 22 14
1 12 20 37
1 11 8 18
1 10 10 6
2 11 13 4
2 12 10 12
3 14 0 5
一个看起来像这样的函数(注意:它实际上在做一些更复杂的事情,不容易分成三个独立的调用,但为了清晰起见,我简化了它):
^{pr2}$我想在A
和{groupby
来获得列B
和{
B C
min mean max min mean max
A
1 10 10.75 12 8 15.0 22
2 11 11.50 12 10 11.5 13
3 14 14.00 14 0 0.0 0
我可以做以下事情:
df2.groupby('A')[['B','C']].agg(
{
'min': lambda g: myfunc(g)[0],
'mean': lambda g: myfunc(g)[1],
'max': lambda g: myfunc(g)[2]
})
但除了这件事很难看,而且多次打电话给myfunc
之外,我最后
max mean min
B C B C B C
A
1 12 22 10.75 15.0 10 8
2 12 13 11.50 11.5 11 10
3 14 0 14.00 0.0 14 0
我可以使用.swaplevel(axis=1)
来交换列级别,但是即使这样,B
和{
如果安排
myfunc
返回一个列为['A','B','C','D']
且行索引为['min', 'mean', 'max']
的数据帧,则可以使用groupby/apply
调用函数(每个组一次)并根据需要连接结果:印刷品
^{pr2}$对于可能遇到此问题且不需要自定义函数的其他人,请注意 您应该始终使用builtin aggregators(下面,由 字符串})如果可能的话。他们的表现比
自定义Python函数。令人高兴的是,在这个玩具问题中,它产生了期望的结果:
'min'
,'mean'
和{像这样的事情也许会奏效。在
然后可以使用swap level来交换列顺序
^{pr2}$相关问题 更多 >
编程相关推荐