如何定期选择带有偏移量的数据帧行?

我想每隔 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)

                       ]]


萧十郎
浏览 151回答 3
3回答

森林海

from datetime import date# dummy datadf = 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]

慕神8447489

不确定这是否是您的目标:pandas date_range如果小时数是 6 并且没有偏移:#set the date as indexdf = df.set_index(1)#get the very first and last dates from the index :start = df.index[0]end = df.index[-1]df.loc[pd.date_range(start=start,freq='6H',end=end)]                            22020-05-06 00:00:00+00:00   02020-05-06 06:00:00+00:00   62020-05-06 12:00:00+00:00   122020-05-06 18:00:00+00:00   18如果偏移量为 2 且小时数 == 4 :df.loc[pd.date_range(start=start + pd.offsets.Hour(2),freq='4H',end=end)]                            22020-05-06 02:00:00+00:00   22020-05-06 06:00:00+00:00   62020-05-06 10:00:00+00:00   102020-05-06 14:00:00+00:00   142020-05-06 18:00:00+00:00   182020-05-06 22:00:00+00:00   22我的列标签是 1,2。(通过剪贴板读取数据时发生)

12345678_0001

你可以使用这个:print (s[(s.index.hour - offset)%period==0])2020-05-06 00:00:00     02020-05-06 06:00:00     62020-05-06 12:00:00    122020-05-06 18:00:00    18Freq: 6H, dtype: int64并且有周期 4 和偏移量 2period = 4offset = 2print (s[(s.index.hour - offset)%period==0])2020-05-06 02:00:00     22020-05-06 06:00:00     62020-05-06 10:00:00    102020-05-06 14:00:00    142020-05-06 18:00:00    182020-05-06 22:00:00    22dtype: int64
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python