首页 > 解决方案 > 如何过滤数据框以便在特定时间每天出现一次

问题描述

我的数据集有一个 datetime 列,该列在很多天中的每个小时都有一个条目。例如:

123412,2020-03-26 12:00,
123412,2020-03-27 12:00,
123412,2020-03-27 09:00,
123412,2020-03-27 09:00,
123412,2020-03-27 15:00,
123412,2020-03-26 15:00,
123412,2020-03-27 11:00,
123412,2020-03-27 12:00,

该示例没有排序,但正如我所说,一天中的每个小时都有一个条目。

我想过滤这些数据的方法是,例如,采取 datetime 2020-03-26 12:00。然后,过滤器将返回以下行:

等等。

我试过Grouper这样的df2 = df2.groupby(pd.Grouper(key=DATETIME, freq='D')),但没有奏效。

我怎样才能做到这一点?谢谢

标签: pythonpython-3.xpandasdataframe

解决方案


boolean indexing您可以通过和过滤日期时间Series.dt.time

print (df)
        a                date   b
0  123412 2020-03-26 12:00:00 NaN
1  123412 2020-03-27 12:00:00 NaN
2  123412 2020-03-27 09:00:00 NaN
3  123412 2020-03-27 09:00:00 NaN
4  123412 2020-03-27 15:00:00 NaN
5  123412 2020-03-26 15:00:00 NaN
6  123412 2020-03-27 11:00:00 NaN
7  123412 2020-03-27 12:00:00 NaN

d = '2020-03-26 12:00'

df = df[df['date'].dt.time.eq(pd.Timestamp(d).time())]
print (df)
        a                date   b
0  123412 2020-03-26 12:00:00 NaN
1  123412 2020-03-27 12:00:00 NaN
7  123412 2020-03-27 12:00:00 NaN

如果只想要唯一的日期时间:

d = '2020-03-26 12:00'

df = df.drop_duplicates('date')
df = df[df['date'].dt.time.eq(pd.Timestamp(d).time())]
print (df)
        a                date   b
0  123412 2020-03-26 12:00:00 NaN
1  123412 2020-03-27 12:00:00 NaN

推荐阅读