对熊猫数据帧的多列进行条件过滤

时间:2019-11-12 07:35:35

标签: python pandas dataframe

我有一个熊猫数据框,其中有三列,即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。

2 个答案:

答案 0 :(得分:5)

想法是为A列的所有值创建阈值字典,然后为Series.map创建新的Series,因此可以通过B列进行比较,并以boolean indexing进行过滤:< / p>

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

答案 1 :(得分:0)

如果只有两个条件,则可以像这样“和”和“或”运算符:

df = df[((df['A'] == '01-19') & (df['B'] < 6)) | ((df['A'] == '01-20') & (df['B'] < 3))]