从df中删除具有特定时间列表的数据

时间:2019-04-28 09:14:05

标签: python pandas timestamp

我有一个数据框用户,在GroupBy之前有一些“坏”行,此数据框中的键是id。我知道我应该删除这些行。

我有此列表:

period = pd.DatetimeIndex(start='00:00:00',end='23:50:00',freq='120min').strftime('%H:%M:%S')

  Index(['00:00:00', '02:00:00', '04:00:00', '06:00:00', '08:00:00', '10:00:00',
       '12:00:00', '14:00:00', '16:00:00', '18:00:00', '20:00:00', '22:00:00'],
      dtype='object')

Mydata is:
                id      timestamp             counts
    0             1  2013-01-07 00:10:00            1
    1             1  2013-01-07 00:30:00            1
    2             1  2013-01-07 00:40:00            1
    3             1  2013-01-07 00:50:00            1
    4             1  2013-01-07 01:00:00            6
    5             1  2013-01-07 01:10:00            4
    6             1  2013-01-07 01:20:00            4
    7             1  2013-01-07 01:30:00           11
    8             1  2013-01-07 01:40:00           13
    9             1  2013-01-07 01:50:00           11
    10            1  2013-01-07 02:00:00           13
    11            1  2013-01-07 02:10:00           13
    12            1  2013-01-07 02:20:00           15
    13            1  2013-01-07 02:30:00           21
    14            1  2013-01-07 02:40:00           13
    15            1  2013-01-07 02:50:00           20
    16            1  2013-01-07 03:00:00           22
    17            1  2013-01-07 03:10:00           19
    18            1  2013-01-07 03:20:00           15
    19            1  2013-01-07 03:30:00           23
    20            1  2013-01-07 03:40:00           12
    21            1  2013-01-07 03:50:00           10
    22            1  2013-01-07 04:00:00           17
    23            1  2013-01-07 04:10:00           12
    24            1  2013-01-07 04:20:00           19
    25            1  2013-01-07 04:30:00           15
    26            1  2013-01-07 04:40:00           19
    27            1  2013-01-07 04:50:00           12
    28            1  2013-01-07 05:00:00           21
    29            1  2013-01-07 05:10:00           22

我想删除不在列表中的所有行。我当前的代码是下一个,但它给了我一个空的结果:

df = df.drop(df[~df.timestamp.apply(lambda x: x.time()).isin(date_rng)].index.tolist())

1 个答案:

答案 0 :(得分:0)

drop用于索引标签,但是您可以简单地使用布尔索引:

df.loc[~df['timestamp'].isin(period)]

注释:

  1. 不确定df.date_time的来源,我假设这是timestamp中的Mydata列。
  2. 确保df['timestamp']periods具有相同的dtype。我认为您不需要.strftime('%H:%M:%S'),最好将timestamp列转换为datetime64[ns](如果尚未设置日期时间)。