我有一个数据框用户,在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())
答案 0 :(得分:0)
drop
用于索引标签,但是您可以简单地使用布尔索引:
df.loc[~df['timestamp'].isin(period)]
注释:
df.date_time
的来源,我假设这是timestamp
中的Mydata
列。df['timestamp']
和periods
具有相同的dtype
。我认为您不需要.strftime('%H:%M:%S')
,最好将timestamp
列转换为datetime64[ns]
(如果尚未设置日期时间)。