python - 对 pandas 数据框的多列进行条件过滤
问题描述
我有一个包含三列的 pandas 数据框,A(日期)、B(分类值)和 C(实际值)。
A | B | C
01-19 | 5 | 0.34
01-19 | 3 | 0.25
01-19 | 7 | 0.07
01-20 | 5 | 0.15
01-20 | 2 | 0.36
等等。
我想要的是根据日期和特定阈值过滤行 - 例如:
[(01-19, x<6), (01-20, x<3)]
在这种情况下,那会给我
A | B | C
01-19 | 5 | 0.34
01-19 | 3 | 0.25
01-20 | 2 | 0.36
我的解决方案是用 A 和 B 建立一个多索引,但是我不完全确定如何过滤 B。
解决方案
想法是为列的所有值创建阈值字典A
,然后创建Series.map
新系列,因此可以按B
列进行比较并按以下方式过滤boolean indexing
:
d = {'01-19': 6, '01-20' : 3}
df = df[df['B'] < df['A'].map(d)]
print (df)
A B C
0 01-19 5 0.34
1 01-19 3 0.25
4 01-20 2 0.36
详情:
print (df['A'].map(d))
0 6
1 6
2 6
3 3
4 3
Name: A, dtype: int64