Python 为B列的每个值加上A列的平均值

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

假设您有以下数据帧(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', 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