pandas 按每15分钟间隔筛选datetime列

dbf7pr2w  于 2023-01-01  发布在  其他
关注(0)|答案(3)|浏览(202)

问题是:我有一个带有datetime列的 Dataframe (格式为python的datetime格式),其中包含不同日期的读数,例如2020-01-03T00:00:00.000Z2020-01-03T00:05:00.000Z等,直到2020-01-03T00:23:55.000Z
我想基于此列过滤整个 Dataframe ,但仅保留每隔0、15、30、45分钟的读数。
我看到了另一个问题,它做了类似的pd.date_range(start, freq='15T', periods=len(df)),但问题是不一样的。谢谢。

nsc4cvqm

nsc4cvqm1#

我可以用一种简单优雅的方式,
让我们假设 Dataframe 被称为df,并且所讨论的列被称为'datetime',下面是解决方案:

import datetime as dt # in case not already imported!
df['minute'] = df['datetime'].dt.minute
df= df[df['minute'].isin([0, 15, 30, 45])]
sr4lhrrt

sr4lhrrt2#

那么将数据按时间间隔分组并在上面应用所需的任何聚合/转换呢?

from datetime import datetime

import pandas as pd

df = pd.DataFrame(
    {
        "dt": [
            datetime(2022, 12, 29, 15, 23, 0),
            datetime(2022, 12, 29, 15, 38, 0),
            datetime(2022, 12, 29, 15, 43, 0),
            datetime(2022, 12, 29, 16, 11, 0),
        ],
        "dat": [1, 2, 3, 4],
    }
)

groups = df.groupby(
    pd.Grouper(key="dt", freq="15min", origin="start_day", label="left")
)

groups.first()

给予

dat
dt                      
2022-12-29 15:15:00  1.0
2022-12-29 15:30:00  2.0
2022-12-29 15:45:00  NaN
2022-12-29 16:00:00  4.0
pw9qyyiw

pw9qyyiw3#

你可以重新取样日期索引为15分钟的间隔和b填充数据.

start_date="12/1/2022"
end_date="12/3/2022"
df=pd.DataFrame(pd.date_range(start_date, end_date,freq="D"),columns=["Date"])
df['Date']=df['Date'].astype('datetime64[ns]')
df.set_index('Date',inplace=True)
df=df.asfreq('15T', method='bfill')
for item in df.index:
    print(item)

相关问题