根据timedelta列中的总秒数过滤DataFrame

时间:2019-05-22 17:47:34

标签: python pandas

我的df看起来像这样。

      date            pre_date              time_delta
0 2019-05-13 10:45:57 2019-05-13 10:45:57   00:00:00
1 2019-05-13 14:22:22 2019-05-13 10:45:57   03:36:25
2 2019-05-13 14:32:22 2019-05-13 14:22:22   00:10:00
3 2019-05-14 03:58:27 2019-05-13 14:32:22   13:26:05
4 2019-05-14 04:08:27 2019-05-14 03:58:27   00:10:00
5 2019-05-14 04:28:27 2019-05-14 04:08:27   00:20:00

我的目标是通过“ time_delta”列的值尽可能有效地对其进行过滤。

sec = 500
df = df[(d_df['time_delta']>(pd.Timedelta(sec, unit='s'))) | ((df['time_delta']==pd.Timedelta(0, unit='s')))]

它的效果比for循环更好,但仍然很慢。 有什么建议吗?

2 个答案:

答案 0 :(得分:1)

如果“ time_delta”是timedelta类型的列,则可以将总秒数提取为整数(或浮点数)并进行比较:

delta = df['time_delta'].dt.total_seconds()
df[(delta == 0) | (delta > sec)]

答案 1 :(得分:0)

这对您有用吗?

mask = (df['Time_delta'].dt
          .seconds
          .between(0,sec,
                   inclusive=False)
       )

df = df[mask]