简体   繁体   English

熊猫用平均值代替列

[英]pandas replace column with mean for values

I have a pandas dataframe and want replace each value with the mean for it. 我有一个pandas数据框,想要用均值替换每个值。

    ID    X     Y
    1     a     1
    2     a     2
    3     a     3
    4     b     2
    5     b     4

How do I replace Y values with mean Y for every unique X? 如何为每个唯一的X用平均值Y替换Y值?

    ID    X     Y
    1     a     2
    2     a     2
    3     a     2
    4     b     3
    5     b     3

Use transform : 使用transform

df['Y'] = df.groupby('X')['Y'].transform('mean')
print (df)
   ID  X  Y
0   1  a  2
1   2  a  2
2   3  a  2
3   4  b  3
4   5  b  3

For new column in another DataFrame use map with drop_duplicates : 对于另一个DataFrame新列, DataFrame使用带有drop_duplicates map

df1 = pd.DataFrame({'X':['a','a','b']})
print (df1)
   X
0  a
1  a
2  b

df1['Y'] = df1['X'].map(df.drop_duplicates('X').set_index('X')['Y'])
print (df1)
   X  Y
0  a  2
1  a  2
2  b  3

Another solution: 另一个解决方案:

df1['Y'] = df1['X'].map(df.groupby('X')['Y'].mean())
print (df1)
   X  Y
0  a  2
1  a  2
2  b  3

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM