python 检查时间戳列是否为5分钟的倍数,并删除开头和结尾,使其以5分钟开始/结束

dgiusagp  于 2023-03-11  发布在  Python
关注(0)|答案(2)|浏览(193)

我有一分钟的时间序列数据

df
timestamp          col
2020-10-10 0:02    10
2020-10-10 0:03    20
2020-10-10 0:04    12
2020-10-10 0:05    30
....

我想确保它以5的倍数开头。在这里,我想删除0:05之前的行,因为它以2分钟开头,最接近5的倍数是该行。我在一个文件夹中有很多文件,所以请建议一个可扩展的答案。
谢谢你。

qoefvg9y

qoefvg9y1#

您可以转换为DatetimeIndex,然后提取分钟。最后应用模5,检查余数,并获得第一个True索引:

start_idx = pd.to_datetime(df['timestamp']).dt.minute.mod(5).eq(0).idxmax()

输出:

>>> start_idx
3

>>> df.loc[start_idx:]
         timestamp  col
3  2020-10-10 0:05   30
py49o6xq

py49o6xq2#

试试这个:

import pandas as pd
import datetime as dt
import random

base = pd.Timestamp.today()
timestamp_list = [base + dt.timedelta(minutes=x) for x in range(10)]

df = pd.DataFrame({'timestamp': [i for i in timestamp_list], 'col1': [random.randrange(1, 11) for i in range(10)]})
df = df.loc[(df['timestamp'].dt.minute % 5== 0).idxmax() :]
print (df)

输出

0 2023-03-10 18:10:02.938585     4
1 2023-03-10 18:11:02.938585     4
2 2023-03-10 18:12:02.938585     4
3 2023-03-10 18:13:02.938585     9
4 2023-03-10 18:14:02.938585     2
5 2023-03-10 18:15:02.938585     9
6 2023-03-10 18:16:02.938585     9
7 2023-03-10 18:17:02.938585     9
8 2023-03-10 18:18:02.938585     9
9 2023-03-10 18:19:02.938585     9

相关问题