2016-03-04 131 views
0
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

回答

1
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 
0

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