python - Python-pandas - Datetimeindex:分析滚动滚动的最常用的 Python 策略是什么?(例如每天的特定时间)
问题描述
我正在研究一个数据框,其中包含跨越几年的每小时温度数据的 DateTimeIndex。我想在一天的 20:00 到第二天的 8:00 之间添加一个最低温度的列。白天温度 - 从 8:00 到 20:00 - 不感兴趣。结果可以是原始数据的相同小时分辨率,也可以重新采样到几天。
我已经研究了许多策略来解决这个问题,但我不确定最有效的(主要是编码效率和次要计算效率)分别是 pythonic 的方式来做到这一点。我提出的一些可能性:
- 根据
df.index.hour
和使用group_by
或df.loc
找到最小值,附加一个带有“白天”、“夜晚”标签的列 - 重新采样到 12 小时并每秒删除一次值。不知道如何使重采样期从 20:00 开始。
- 添加一个多索引 - 我想这类似于方法 1,但对于我想要实现的目标来说感觉有点过头了。
- 使用
df.between_time
(https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.between_time.html#pandas.DataFrame.between_time)虽然我不确定午夜的日期变化是否会这有点乱。 - 最后有一些关于将滚动与步进参数结合为熊猫新功能的讨论:https ://github.com/pandas-dev/pandas/issues/15354
原始 df 如下所示:
datetime temp
2009-07-01 01:00:00 17.16
2009-07-01 02:00:00 16.64
2009-07-01 03:00:00 16.21 #<-- minimum for the night 2009-06-30 (previous date since periods starts 2009-06-30 20:00)
... ...
2019-06-24 22:00:00 14.03 #<-- minimum for the night 2019-06-24
2019-06-24 23:00:00 18.87
2019-06-25 00:00:00 17.85
2019-06-25 01:00:00 17.25
我想得到这样的东西(从 20:00 到第 1 天 8:00 的最低温度):
datetime temp
2009-06-30 23:00:00 16.21
2009-07-01 00:00:00 16.21
2009-07-01 01:00:00 16.21
2009-07-01 02:00:00 16.21
2009-07-01 03:00:00 16.21
... ...
2019-06-24 22:00:00 14.03
2019-06-24 23:00:00 14.03
2019-06-25 00:00:00 14.03
2019-06-25 01:00:00 14.03
或者更简洁一点:
datetime temp
2009-06-30 16.21
... ...
2019-06-24 14.03
解决方案
使用该base
选项resample
:
rs = df.resample('12h', base=8).min()
然后只保留 20:00 的行:
rs[rs.index.hour == 20]
推荐阅读
- pytest - pytest 依赖项跳过参数化测试
- laravel - Laravel 刀片组件到 html 字符串
- python-3.x - 连接从多个 aws s3 存储桶读取的数据帧生成 NoneType 错误
- xamarin - 更改 ContentTemplate 后不再绑定 BindinContext
- android - 为什么我的 android UI 布局对每部手机都没有响应?
- rust - 如何在 Rust 中更改 cortex-m4 处理器的异常优先级?
- linux - 如何跟踪(tail -f)目录中的最新文件(匹配模式)并作为带参数的别名调用
- google-apps-script - 谷歌脚本锁是如何工作的?
- python - 按组划分的唯一值的百分比
- json - Groovy 中的复杂 JSON 转换