熊猫:如何将年平均值添加到数据框?

熊猫:如何将年平均值添加到数据框?

问题描述:

year x    y 
1987 1.609438  0 
1988 1.386294  0 
1989 1.098612  1 
1987 0.693147  0 
1988 0.000000  0 
1989 -0.693147  1 

...熊猫:如何将年平均值添加到数据框?

所以,我可以做好今年

>>> df.groupby(['year'])['x','y'].mean() 
    x  y 
year  meanX  meanY      
1987  0.597434 0.000000 
1988  0.428441 0.351852 
1989  0.155169 0.185185 

我如何添加一个新列的每一行关联到一年获得x的平均值?我的意思是我想要这样的事情:

year x    y meanX meanY 
1987 1.609438  0 0.597434 0.000000 
1988 1.386294  0 0.428441 0.351852 
1989 1.098612  1 0.155169 0.185185 
1987 0.693147  0 0.597434 0.000000 
1988 0.000000  0 0.428441 0.351852 
1989 -0.693147  1 0.155169 0.185185 

这样做的正确方法是什么?

+2

我不明白你是怎么认为输出 '米尼',但你以后'在[ 196]: df df [['meanx','meany']] = df.groupby('year')[['x','y']]。transform('mean') df Out [196 ]: 年XY meanx米尼 0 1987 0 1.609438 1.151293 0 1 1988 1.386294 0 0.693147 0 2 1989 1.098612 1 0.202733 1 3 1987 0.693147 0 1.151293 0 4 1988 0.000000 0 0.693147 0 5 1989 -0.693147 1 0.202733 1 '? – EdChum

+0

我的意思是我只介绍了数据库的一部分。请注意“...”。这是你的问题吗?抱歉!谢谢! – DanielTheRocketMan

df['x_mean'] = df.groupby('year').x.transform(lambda s: s.mean()) 
df['y_mean'] = df.groupby('year').y.transform(lambda s: s.mean()) 

>>> df 
    year   x y x_mean y_mean 
0 1987 1.609438 0 1.151293  0 
1 1988 1.386294 0 0.693147  0 
2 1989 1.098612 1 0.202733  1 
3 1987 0.693147 0 1.151293  0 
4 1988 0.000000 0 0.693147  0 
5 1989 -0.693147 1 0.202733  1 

pandas.DataFrame.merge应该做你想要什么:

data = [ 
    {'year': 1987, 'x': 1.5116, 'y': 0}, 
    {'year': 1988, 'x': 1.135, 'y': 1} 
] 
means = df.groupby(['year'])['x', 'y'].mean() 
df.merge(right=means, left_on='year', right_index=True, suffixes=('', 'mean')) 

返回:

 x y year xmean ymean 
0 1.5116 0 1987 1.5116  0 
1 1.1350 1 1988 1.1350  1