rur*_*urp 4 python dataframe pandas
我有一个DataFrame
>>> df = pd.DataFrame({'a':[1,1,1,2,2,2],
... 'b':[10,20,20,10,20,20],
... 'result':[100,200,300,400,500,600]})
...
>>> df
a b result
0 1 10 100
1 1 20 200
2 1 20 300
3 2 10 400
4 2 20 500
5 2 20 600
Run Code Online (Sandbox Code Playgroud)
并希望创建一个新列,作为“ a”和“ b”对应值的平均结果。我可以通过groupby获得这些值:
>>> df.groupby(['a','b'])['result'].mean()
a b
1 10 100
20 250
2 10 400
20 550
Name: result, dtype: int64
Run Code Online (Sandbox Code Playgroud)
但无法弄清楚如何将其转换为原始DataFrame中的新列。最终结果应如下所示:
>>> df
a b result avg_result
0 1 10 100 100
1 1 20 200 250
2 1 20 300 250
3 2 10 400 400
4 2 20 500 550
5 2 20 600 550
Run Code Online (Sandbox Code Playgroud)
我可以通过遍历“ a”和“ b”的组合来做到这一点,但是对于更大的数据集,这将变得非常缓慢且笨拙。可能有一种更简单,更快捷的方法。
您需要transform:
df['avg_result'] = df.groupby(['a','b'])['result'].transform('mean')
Run Code Online (Sandbox Code Playgroud)
这将为您生成groupby值的正确索引列:
a b result avg_result
0 1 10 100 100
1 1 20 200 250
2 1 20 300 250
3 2 10 400 400
4 2 20 500 550
5 2 20 600 550
Run Code Online (Sandbox Code Playgroud)