python - 如何定期选择带有偏移量的数据帧行?
问题描述
我想每隔 n 小时选择一次数据框的行。我可以使用df[::int(period)]
,但我不知道时间序列何时开始。另外,我需要将 anoffset
应用于period
,因此假设我的数据框从午夜开始,它会给出:
period = 6
offset = 0
hours = [0, 6, 12, 18]
offset = 3
hours = [3, 9, 15, 21]
我怎么能用最少的行做到这一点?
这就是我的数据框的样子:
2020-05-06 00:00:00+00:00 0
2020-05-06 01:00:00+00:00 1
2020-05-06 02:00:00+00:00 2
2020-05-06 03:00:00+00:00 3
2020-05-06 04:00:00+00:00 4
2020-05-06 05:00:00+00:00 5
2020-05-06 06:00:00+00:00 6
2020-05-06 07:00:00+00:00 7
2020-05-06 08:00:00+00:00 8
2020-05-06 09:00:00+00:00 9
2020-05-06 10:00:00+00:00 10
2020-05-06 11:00:00+00:00 11
2020-05-06 12:00:00+00:00 12
2020-05-06 13:00:00+00:00 13
2020-05-06 14:00:00+00:00 14
2020-05-06 15:00:00+00:00 15
2020-05-06 16:00:00+00:00 16
2020-05-06 17:00:00+00:00 17
2020-05-06 18:00:00+00:00 18
2020-05-06 19:00:00+00:00 19
2020-05-06 20:00:00+00:00 20
2020-05-06 21:00:00+00:00 21
2020-05-06 22:00:00+00:00 22
2020-05-06 23:00:00+00:00 23
例如,周期 6 和偏移量 0 我想:
2020-05-06 00:00:00+00:00 0
2020-05-06 06:00:00+00:00 6
2020-05-06 12:00:00+00:00 12
2020-05-06 18:00:00+00:00 18
对于第 4 期和第 2 期,我想:
2020-05-06 02:00:00+00:00 2
2020-05-06 06:00:00+00:00 6
2020-05-06 10:00:00+00:00 10
2020-05-06 14:00:00+00:00 14
2020-05-06 18:00:00+00:00 18
2020-05-06 22:00:00+00:00 22
这就是我设法做到这一点的方法,但是这种方法不灵活,并且不支持 23 之后的偏移。
df.loc[[ind for ind in df.index if
(ind.hour == 0 + offset) |
(ind.hour == 6 + offset) |
(ind.hour == 12 + offset) |
(ind.hour == 18 + offset)
]]
解决方案
from datetime import date
# dummy data
df = pd.DataFrame({'num':np.arange(0,23+1),
'date':pd.date_range(date(2020,5,6),periods=23+1,freq='H')})
df = df.set_index('date')
df.loc[df.shift(offset).dropna()[::period].index]
推荐阅读
- python - 在给定输入中查找python中的最大和最小数字
- html - 根据设备更改文本大小
- c++ - 在 Raspberry PI 上使用 libtorch 构建程序时的链接问题
- java - AndroidStudio 中的 MainActivity 未找到自定义 Java 类
- delphi - 在方法链中用作输出和(非参考)输入的值
- python - Tkinter:将条目设置为只读不起作用
- javascript - 使用自定义原型创建 JS 函数的最佳方法是什么?
- javascript - 配对和挑战
- c++ - 通过命令行在 Visual Studio 中编译单个独立文件
- java - 如何在循环中使用变量存储先前的值?