我有一个pandas数据框,并希望用它的平均值替换每个值。
ID X Y
1 a 1
2 a 2
3 a 3
4 b 2
5 b 4
如何为每个唯一的X替换Y值为均值Y?
ID X Y
1 a 2
2 a 2
3 a 2
4 b 3
5 b 3
答案 0 :(得分:4)
使用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
对于另一个DataFrame
的新列,map
使用drop_duplicates
:
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
另一种解决方案:
df1['Y'] = df1['X'].map(df.groupby('X')['Y'].mean())
print (df1)
X Y
0 a 2
1 a 2
2 b 3