在分组后获取value_counts的最大值
data.groupby(['batsman'])['runs'].value_counts() gives the following result;
我怎么才能找出哪个玩家得到了最多的0分、1分、2分、3分等等呢?
AB de Villiers 0 29
1 14
4 6
2 3
6 1
Abdur Razzak 0 13
1 5
2 1
Adam Gilchrist 0 47
1 38
4 17
2 9
6 7
3 1
Aftab Ahmed 1 51
...
Younis Khan 0 61
1 39
4 10
2 9
6 5
1 个回答
3
我觉得我会先把数据按照运行次数分组,然后找出出现频率最高的那个:
In [11]: df = pd.DataFrame([['AB de Villiers', 0], ['AB de Villiers', 0], ['AB de Villiers', 1], ['Abdur Razzak', 0], ['Abdur Razzak', 1], ['Abdur Razzak', 1]], columns=['batsman', 'runs'])
In [12]: df
Out[12]:
batsman runs
0 AB de Villiers 0
1 AB de Villiers 0
2 AB de Villiers 1
3 Abdur Razzak 0
4 Abdur Razzak 1
5 Abdur Razzak 1
[6 rows x 2 columns]
In [13]: df.groupby(['runs']).apply(lambda x: x['batsman'].value_counts().index[0])
Out[13]:
runs
0 AB de Villiers
1 Abdur Razzak
dtype: object
可能还有稍微更有效的方法来找出出现次数最多的,但这个方法已经相当高效了。