在分组后获取value_counts的最大值

0 投票
1 回答
8760 浏览
提问于 2025-04-18 00:18
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

可能还有稍微更有效的方法来找出出现次数最多的,但这个方法已经相当高效了。

撰写回答