我对熊猫还很陌生,甚至在陈述问题时遇到了麻烦,更不用说解决了。如果有这样的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
答案 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