【发布时间】:2018-08-20 14:47:33
【问题描述】:
我有一个像这样的 Pandas DataFrame:
import numpy as np
import pandas as pd
np.random.seed(1234)
midx = pd.MultiIndex.from_product([['a', 'b', 'c'], pd.date_range('20130101', periods=6)], names=['letter', 'date'])
df = pd.DataFrame(np.random.randn(len(midx), 1), index=midx)
该数据框如下所示:
0
letter date
a 2013-01-01 0.471435
2013-01-02 -1.190976
2013-01-03 1.432707
2013-01-04 -0.312652
2013-01-05 -0.720589
2013-01-06 0.887163
b 2013-01-01 0.859588
2013-01-02 -0.636524
2013-01-03 0.015696
2013-01-04 -2.242685
2013-01-05 1.150036
2013-01-06 0.991946
c 2013-01-01 0.953324
2013-01-02 -2.021255
2013-01-03 -0.334077
2013-01-04 0.002118
2013-01-05 0.405453
2013-01-06 0.289092
我想做的是根据 date 上的条件保留所有行,该条件取决于 letter。例如,
- 对于字母a,我想保留所有行,以便日期在“20130102”和“20130105”(包括)之间
- 对于字母 b,我想保留所有行,以便 date == "20130103"
- 对于字母 c,我想保留所有行,以便 日期在“20130103”和“20130105”(包括)之间
例如,所有这些信息都可以存储在字典中。
dictionary = {"a": slice("20130102", "20130105"),
"b": "20130103",
"c": slice("20130103", "20130105")}
有没有一种简单的方法可以用 pandas 来计算这个?我没有找到有关此类过滤的任何信息。
【问题讨论】:
标签: python pandas filtering multi-index