熊猫:如何将年平均值添加到数据框?
问题描述:
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
这样做的正确方法是什么?
答
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
我不明白你是怎么认为输出 '米尼',但你以后'在[ 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
我的意思是我只介绍了数据库的一部分。请注意“...”。这是你的问题吗?抱歉!谢谢! – DanielTheRocketMan