首页 > 解决方案 > 按列对数据框进行分组,然后获取另一列的前 3 个 .count() 值?

问题描述

我有一个我命名为停车的数据框,它有多个列,在本例中为注册状态、违规代码和传票编号。

对于每个注册状态,我想要最高行数的 3 个违规代码。我能得到的最好的是:

park_state_group =parking.groupby(['注册状态', '违规代码'])['传票号码'].count()

打印时(即 print(parking_state_group.reset_index()) 看起来像:

     Registration State  Violation Code  Summons Number
0                    99               0              14
1                    99               6               1
2                    99              10               6
3                    99              13               2
4                    99              14              75
...                 ...             ...             ...
1811                 WY              37               3
1812                 WY              38               4
1813                 WY              40               4
1814                 WY              46               1
1815                 WY              68               1

这至少让我知道了每个州的每个违规代码的计数(Summons Number 就像每一行的 ID 字段)。我希望这仅返回每个州的最高计数的 3 个违规代码,例如:

      Registration State  Violation Code  Summons Number
0                    99               14             75
1                    99               31             61
2                    99               87             55
...                 ...             ...             ...
1812                 WY              38               4
1813                 WY              40               4
1811                 WY              37               3

我试过 .nlargest() 但这似乎没有得到最大的 .count(),只有一列中的最大值,这不是我想要的。

标签: pythonpython-3.xpandaspandas-groupby

解决方案


我们试试看

df[['Registration State', 'Violation Code', 'Summons Number']].groupby('Registration State')['Summons Number'].nlargest(3).reset_index().rename(columns={'level_1':'Violation Code'})

推荐阅读