假设您有以下pandas数据框(df):
A B C
0 2 1 4
1 3 4 5
2 3 1 1
3 1 4 0
4 5 0 1
并且您希望为列B的每个不同值添加包含列A的平均值(或任何其他聚合函数)的列。您希望保留所有列。所以结果看起来像这样(df_result):
A B C meanA_givenB
0 2 1 4 (2+3)/2
1 3 4 5 (3+1)/2
2 3 1 1 (2+3)/2
3 1 4 0 (3+1)/2
4 5 0 1 5 /1
我这样做的方法如下:
import pandas as pd
meanA_givenB = df.groupby('B').A.mean()
df_result = pd.merge(df, pd.DataFrame(meanA_givenB),
how='left', left_on='A', right_index=True,
suffixes=['','_meanA_givenB'])
必须有一种更清洁,更有效的方法。
答案 0 :(得分:4)
您可以使用transform
:
>>> df['avg(A)|B'] = df.groupby('B')['A'].transform('mean')
>>> df
A B C avg(A)|B
0 2 1 4 2.5
1 3 4 5 2.0
2 3 1 1 2.5
3 1 4 0 2.0
4 5 0 1 5.0