如何过滤数据帧以便在特定时间每天发生一次

Fel*_*das 3 python dataframe python-3.x pandas

我的数据集有一个 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,
Run Code Online (Sandbox Code Playgroud)

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

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

  • 2020-03-26 12:00
  • 2020-03-25 12:00
  • 2020-03-24 12:00

等等。

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

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

jez*_*ael 6

您可以通过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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)