首页 > 解决方案 > 对 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。

标签: pythonpandasdataframe

解决方案


想法是为列的所有值创建阈值字典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

推荐阅读