Python 为B列的每个值加上A列的平均值
假设您有以下数据帧(df): 您希望为列B的每个不同值添加一列,其中包含列a的平均值(或任何其他聚合函数)。您希望保留所有列。结果如下(df_结果): 我这样做的方式如下:Python 为B列的每个值加上A列的平均值,python,pandas,Python,Pandas,假设您有以下数据帧(df): 您希望为列B的每个不同值添加一列,其中包含列a的平均值(或任何其他聚合函数)。您希望保留所有列。结果如下(df_结果): 我这样做的方式如下: 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', ri
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'])
必须有一种更干净、更有效的方法来做这件事。您可以使用:
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'])
>>> 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