在pandas DataFrame的多列中应用自定义功能

时间:2018-07-14 15:29:04

标签: python pandas

我对熊猫还很陌生,甚至在陈述问题时遇到了麻烦,更不用说解决了。如果有这样的pandas DataFrame:

m = [[1,2,3], [4,2,4], [3,4,5], [2,3,4], [1,5,3], [4,2,5], [3,4,3], [2,1,4], [1,2,3], [4,3,3], [3,2,5], [2,2,4]]
d = pd.DataFrame(m, columns=['key', 'val1', 'val2'])

我想对每行应用一个自定义函数(例如val1 ** val2)。然后,我想按键汇总(例如,平均值)。最终结果如下所示:

   key  result
0    1   47.00
1    2   32.67
2    3  373.33
3    4   19.00

我知道我可以通过使用循环来做到这一点,但是我希望以大多数python / pandas的方式实现:通过对键进行分组,然后在所有列上应用自定义函数。还是最好在所有行上应用自定义函数,然后通过均值聚合按键应用groupby?

TIA

1 个答案:

答案 0 :(得分:0)

通过自定义功能创建新的Series,并通过groupby-Series创建d['key'],并使用汇总mean

d = (d['val1'] ** d['val2']).groupby(d['key']).mean().reset_index(name='mean')

或首先创建新列,然后聚合mean

d['col'] = (d['val1'] ** d['val2'])
d = d.groupby('key')['col'].mean().reset_index(name='mean')

print (d)
   key        mean
0    1   47.000000
1    2   32.666667
2    3  373.333333
3    4   25.000000