2017-04-26 74 views
1

我在我的python熊猫数据上运行.mean(),但是这只返回我分组的键和所需列的平均值。我想要所有的列,意思是替换原始值。 已经尝试了多件事,但似乎没有任何结果。下面是我使用生成的代码意味着在python中获取变量的平均值

dd1=df.groupby(['key']).agg({'sales':"mean"}).reset_index() 
+1

给你的数据的一个例子。什么是列,列中的数据是什么,您期望得到什么结果。 – GSazheniuk

+0

你为什么要替换原来的值?只需将'.mean()'应用于数据框,您应该在那里。 – Elmex80s

回答

0

你想transform ......不agg

dd1 = df.groupby('key').transform('mean') 

Minimal and Complete Verifiable Example MCVE

df = pd.DataFrame(
    np.random.randn(10, 4) 
).add_prefix('C').assign(key=np.random.choice(list('AB'), 10)) 
print(df) 

     C0  C1  C2  C3 key 
0 -0.239780 0.167832 0.879349 0.643696 A 
1 0.517747 0.573424 -0.480853 -0.162014 A 
2 0.236032 -0.396924 -1.406381 1.197946 A 
3 0.479451 -0.790073 0.219239 -0.157358 B 
4 -0.605864 -0.461622 -1.427521 -1.709760 B 
5 -0.281919 -0.965817 1.256316 -1.351529 A 
6 -2.085293 0.954725 -1.744391 -1.069667 A 
7 -2.100504 -1.161964 -1.102306 0.547207 B 
8 1.808283 -0.728799 -1.763971 -1.221539 B 
9 -0.975264 0.958484 -0.458139 1.796640 B 

现在transform

dd1 = df.groupby('key').transform('mean') 
print(dd1) 

     C0  C1  C2  C3 
0 -0.370642 0.066648 -0.299192 -0.148313 
1 -0.370642 0.066648 -0.299192 -0.148313 
2 -0.370642 0.066648 -0.299192 -0.148313 
3 -0.278780 -0.436795 -0.906540 -0.148962 
4 -0.278780 -0.436795 -0.906540 -0.148962 
5 -0.370642 0.066648 -0.299192 -0.148313 
6 -0.370642 0.066648 -0.299192 -0.148313 
7 -0.278780 -0.436795 -0.906540 -0.148962 
8 -0.278780 -0.436795 -0.906540 -0.148962 
9 -0.278780 -0.436795 -0.906540 -0.148962 

您可以通过限制这短短列:

cols = ['C0', 'C1', 'C2', 'C3'] 
dd1 = df.groupby('key')[cols].transform('mean') 
print(dd1) 

     C0  C1  C2  C3 
0 -0.370642 0.066648 -0.299192 -0.148313 
1 -0.370642 0.066648 -0.299192 -0.148313 
2 -0.370642 0.066648 -0.299192 -0.148313 
3 -0.278780 -0.436795 -0.906540 -0.148962 
4 -0.278780 -0.436795 -0.906540 -0.148962 
5 -0.370642 0.066648 -0.299192 -0.148313 
6 -0.370642 0.066648 -0.299192 -0.148313 
7 -0.278780 -0.436795 -0.906540 -0.148962 
8 -0.278780 -0.436795 -0.906540 -0.148962 
9 -0.278780 -0.436795 -0.906540 -0.148962 
+0

谢谢,这看起来不错。但是有没有办法让平均数只有几个变量,而不是全部?我的数据框也有一组catagorical变量以及 –

+0

我正在运行Python 2.6.6,并给我下面的错误 - ValueError:无法广播输入数组从形状(4)到形状(15,11)。这是由于python版本问题吗? –

+0

@AkshatAgrawal可能是......我不确定。至于限制它只有几列,请参阅更新后的帖子。 – piRSquared