python - 按列对数据框进行分组,然后获取另一列的前 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(),只有一列中的最大值,这不是我想要的。
解决方案
我们试试看
df[['Registration State', 'Violation Code', 'Summons Number']].groupby('Registration State')['Summons Number'].nlargest(3).reset_index().rename(columns={'level_1':'Violation Code'})
推荐阅读
- system-verilog - 为什么我的 System Verilog 动态数组总和约束不起作用?(在 EDA Playground 上运行(Aldec Tool Riviera Pro 2017)
- c++ - C++ 字符串和 If 语句
- ruby-on-rails - rspec @variable 返回 nil
- reactjs - TS/SFC/RenderProp:无法调用类型缺少调用签名的表达式
- android - onCreateViewHolder(ViewGroup parent, int viewType)
- cobol - 当我想从 cobol 程序显示 ispf 面板时出现错误 rc=20
- ffmpeg - 错误:不可满足的约束:so:libvpx.so.6(缺失)
- python - TypeError:只能将元组(不是“str”)连接到元组 TROUBLES
- asynchronous - 无法从 AWS lambda 调用 AWS Cognito API,但相同的代码在本地 node.js 中运行良好
- vue.js - 如何使用 vue/vuex 从输入中过滤数据?