我有一些具有多索引的数据。这是一个样本。
Subject Date x
00001-SHC-1 2016-09-30 5
00002-SHC-1 2016-09-30 6
00003-SHC-1 2016-09-30 5
00005-SHC-1 2016-09-30 5
00006-SHC-1 2016-09-30 3
此处,Subject
和Date
是我的索引。我可以使用
df.loc[(slice(None), slice('2016-09-01','2016-10-01') ),:]
但如果我想在第二个日期范围内包含观察结果怎么办?如果我想要对'2016-09-01'
和'2016-09-30'
之间的所有观察以及'2017-01-01'
和'2017-01-31'
之间的所有观察结果进行切片怎么办?
答案 0 :(得分:2)
您还可以使用query()
方法:
In [81]: df
Out[81]:
x
Subject Date
00001-SHC-1 2016-09-01 5
00002-SHC-1 2016-09-30 6
00003-SHC-1 2016-09-30 5
00005-SHC-1 2016-12-01 5
00006-SHC-1 2017-01-15 3
00007-SHC-1 2017-03-22 5
In [82]: df.query("'2016-09-01' <= Date <= '2016-09-30' or '2017-01-01' <= Date <= '2017-01-31'")
Out[82]:
x
Subject Date
00001-SHC-1 2016-09-01 5
00002-SHC-1 2016-09-30 6
00003-SHC-1 2016-09-30 5
00006-SHC-1 2017-01-15 3
答案 1 :(得分:1)
好的,这是一个不使用切片的答案,对我来说效果很好。
dates = df.index.get_level_values(1)
mask =((dates>='2016-09-01')&(dates<='2016-09-30'))|((dates>='2017-01-01')&(dates<='2017-01-31'))
df.loc[
(slice(None), mask),:
]