python - 每天只选择系列中的第 n 个最大值
问题描述
我有一些噪音调查数据告诉我在几天内测量的噪音水平。我想找到每个夜间时段的第 5 高噪音水平。我把它做成了 Pandas 系列,并使用 groupby 和 nlargest 方法向我展示了每晚的 5 个最高噪音水平,但现在我只想查看每个时段的第 5 个最高值(即 82、86、86、87 等。 )。实现这一目标的最佳方法是什么?
night_time_lmax.groupby(by=night_time_lmax.index.date).nlargest(5)
Start date & time
2021-08-18 2021-08-18 23:00:00 82.0
2021-08-18 23:15:00 82.0
2021-08-18 23:30:00 82.0
2021-08-18 23:45:00 82.0
2021-08-19 2021-08-19 05:45:00 100.0
2021-08-19 01:15:00 91.0
2021-08-19 04:45:00 87.0
2021-08-19 06:15:00 87.0
2021-08-19 01:45:00 86.0
2021-08-20 2021-08-20 06:30:00 90.0
2021-08-20 06:00:00 88.0
2021-08-20 03:15:00 87.0
2021-08-20 05:30:00 87.0
2021-08-20 01:15:00 86.0
2021-08-21 2021-08-21 01:30:00 98.0
2021-08-21 03:00:00 93.0
2021-08-21 00:45:00 88.0
2021-08-21 06:00:00 88.0
2021-08-21 03:30:00 87.0
2021-08-22 2021-08-22 23:45:00 102.0
2021-08-22 00:30:00 96.0
2021-08-22 06:30:00 92.0
2021-08-22 05:00:00 91.0
2021-08-22 01:30:00 90.0
2021-08-23 2021-08-23 01:15:00 98.0
2021-08-23 02:15:00 88.0
2021-08-23 00:45:00 87.0
2021-08-23 03:00:00 86.0
2021-08-23 06:00:00 86.0
2021-08-24 2021-08-24 01:00:00 93.0
2021-08-24 00:30:00 89.0
2021-08-24 06:30:00 87.0
2021-08-24 02:45:00 86.0
2021-08-24 06:00:00 86.0```
解决方案
我在这里看到两个选项。
要么按您的值对数据进行排序,然后nth
按组获取元素:
(night_time_lmax.sort_values(by='value_column', ascending=False)
.groupby(by=night_time_lmax.index.date).nth(5)
)
## below gives the same result for shorter syntax:
# (night_time_lmax.sort_values(by='value_column')
# .groupby(by=night_time_lmax.index.date).nth(-5)
# )
或者使用 double groupby
,一次用于前 5 名,一次用于最后一名:
(night_time_lmax.groupby(by=night_time_lmax.index.date).nlargest(5)
.groupby(by=night_time_lmax.index.date).last()
)
推荐阅读
- sql-server - 来自 Oracle 的 SSIS 失败“执行升级”组件
- r - 如何更改可折叠盒子的轮廓颜色闪亮
- unit-testing - 什么替代了类组件的 .find?从 Enzyme 迁移到 React 测试库
- flask - FLASK AZURE SQL DB - 查询运行非常缓慢
- mysql - 如何获取不同项目的最新计数(基于日期)?
- java - 新手在 Java 中使用缓存 API 的最佳方式
- php - 在弹性搜索中按 ID 自定义排序顺序作为数组
- c++ - 使用 boost 从 json 读取缓冲区
- solver - MiniZinc int 超出范围
- javascript - 无效的 useSelector 挂钩调用