Pandas 如何根据定制时间列表对时间索引数据进行子集?
我有一个数据帧,其时间索引如下:Pandas 如何根据定制时间列表对时间索引数据进行子集?,pandas,subset,Pandas,Subset,我有一个数据帧,其时间索引如下: date 2020-06-17 23:00:00 558 2020-06-17 23:01:00 184 2020-06-17 23:02:00 113 2020-06-17 23:03:00 85 2020-06-17 23:04:00 47 ... 2020-07-01 18:48:00 203 2020-07-01 18:49:00 118 2020-07-01 1
date
2020-06-17 23:00:00 558
2020-06-17 23:01:00 184
2020-06-17 23:02:00 113
2020-06-17 23:03:00 85
2020-06-17 23:04:00 47
...
2020-07-01 18:48:00 203
2020-07-01 18:49:00 118
2020-07-01 18:50:00 236
2020-07-01 18:51:00 216
2020-07-01 18:52:00 198
Name: quarklgt, Length: 13478, dtype: int64
我的名单如下:
tss=["12:00:04","1:00:06","2:00:10","5:00:14","9:00:24"]
我如何才能为tss列表对数据帧进行子集/筛选?
我尝试了df.index.between_time(tss[0],len(tss)-1)
,但这将给出中间的所有数据。非常感谢
谢谢这是我的方法,首先需要将datetime对象拆分为date和hh:mm:ss格式。然后,我们将
hh:mm:ss
转换为字符串,并使用.isin(tss)
作为过滤的掩码。总而言之:
df = df.reset_index()
df = df[df['date'].map(lambda x: str(x).split()[1]).isin(tss)]
下面是一个示例,它应该保留第二、第四和第六行:
df = pd.DataFrame({'date':['2020-06-17 23:00:00',
'2020-06-17 12:00:04',
'2020-06-17 23:02:00',
'2020-06-17 1:00:06',
'2020-06-17 23:03:00',
'2020-06-17 2:00:10',
'2020-07-01 18:48:00',
'2020-07-01 18:49:00',
'2020-07-01 18:50:00',
'2020-07-01 18:51:00',
'2020-07-01 18:52:00']}).set_index('date')
使用代码后:
df = df.reset_index()
df = df[df['date'].map(lambda x: str(x).split()[1]).isin(tss)]
输出为:
date
1 2020-06-17 12:00:04
3 2020-06-17 1:00:06
5 2020-06-17 2:00:10
非常感谢塞利乌斯。我试过了,但没有得到想要的结果。事实上,整个df都是空的。tss是否需要是Datetimeindex对象?目前这是一个字符串。我道歉。tss没有秒,而df日期有秒。因此,这是我的坏作为一个格式问题。这很好用。非常感谢Celius.BTW,顺便提一下,我尝试了另一种使用多索引的方法,它将df拆分为日期和时间的两个索引,但随后我陷入了子集设置过程。我不知道如何基于多索引df的索引进行子集。无论如何,你的方法工作完美,所以我将使用它。谢谢。我很高兴你能成功!请随意接受答案,将您的问题标记为已解决!