2016-09-27 54 views
4

這裏聚集是我的問題:熊貓交叉,但其值從第三列

df = pd.DataFrame({'A': ['one', 'one', 'two', 'two', 'one'] , 
        'B': ['Ar', 'Br', 'Cr', 'Ar','Ar'] , 
        'C': [1, 0, 0, 1,0 ]}) 

我想產生類似pd.crosstab功能的輸出,但在列和行的交集值應該來自第三列的聚合:

Ar, Br, Cr 
one 0.5 0 0 
two 1 0 0 

例如,有是1,0我們總結在列「C」的值(「一」和列「C」「中,Ar」對應值兩種情況0+ 1)併除以列'C'中的值的數量,因此我們得到(0 + 1)/ 2 = 0.5。每當組合不存在時,我們(如'Cr'和'one')將其設置爲零。有什麼想法嗎?

回答

2

我喜歡groupbyunstack

df.groupby(['A', 'B']).C.mean().unstack(fill_value=0) 

enter image description here

5

可以使用pivot_table()方法,即用aggfunc='mean'每默認:

In [46]: df.pivot_table(index='A', columns='B', values='C', fill_value=0) 
Out[46]: 
B  Ar Br Cr 
A 
one 0.5 0 0 
two 1.0 0 0 
+0

你和piRSquared提供了出色的答案!他們都是正確答案,很難決定給誰正式答覆標籤。我把它交給了piRSquared,因爲他/她的排名略低於你。希望你不會介意。 – user1700890

+1

@ user1700890,絕對沒錯!我也非常喜歡他的回答。實際上''pivot_table()'正是這樣做的(加上一些額外的東西)在...之下......) – MaxU