2016-09-15 19 views
1

我有一個這樣的數據集:我如何在python-pandas中平均ACROSS組?

Participant Type Rating 
1    A  6 
1    A  5 
1    B  4 
1    B  3 
2    A  9 
2    A  8 
2    B  7 
2    B  6 

我想獲得這樣的:

Type MeanRating 
A  mean(6,9) 
A  mean(5,8) 
B  mean(4,7) 
B  mean(3,6) 

因此,對於每一種類型,我想價值較高的平均每組中,然後平均在每個組中的第二個更高的值等。

我不能想出一個合適的方式來做到這一點與蟒蛇大熊貓,因爲手段似乎總是適用於組內,但不是跨越它們。

回答

6

首先使用groupby.rank以創建一個列,允許你對齊的最高值,第二最高值等,然後使用新創建的列計算裝置執行另一groupby

# Get the grouping column. 
df['Grouper'] = df.groupby(['Type', 'Participant']).rank(method='first', ascending=False) 

# Perform the groupby and format the result. 
result = df.groupby(['Type', 'Grouper'])['Rating'].mean().rename('MeanRating') 
result = result.reset_index(level=1, drop=True).reset_index() 

所產生的輸出:

Type MeanRating 
0 A   7.5 
1 A   6.5 
2 B   5.5 
3 B   4.5 

我用的groupby.rankmethod='first'參數爲['Type', 'Participant']組內處理重複收視率的情況下。如果數據集中不存在這種可能性,則可以忽略它,但如果您離開它並且沒有重複項,它將不會更改輸出。

+0

這工作完美。謝謝!!! – rgalhama