如何在多索引数据框架上同时执行两个切片?

时间:2017-05-23 19:34:49

标签: python pandas

我有一些具有多索引的数据。这是一个样本。

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

此处,SubjectDate是我的索引。我可以使用

对数据帧进行切片以获取特定日期范围内的所有观察结果

df.loc[(slice(None), slice('2016-09-01','2016-10-01') ),:]

但如果我想在第二个日期范围内包含观察结果怎么办?如果我想要对'2016-09-01''2016-09-30'之间的所有观察以及'2017-01-01''2017-01-31'之间的所有观察结果进行切片怎么办?

2 个答案:

答案 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),:
]