2017-04-26 73 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