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