繁体   English   中英

Pandas - 基于多个条件的过滤器

[英]Pandas - Filter based on multiple conditions

当我需要按数据框排除某些行时,我遇到了问题。

这里的代码:

import numpy as np
import pandas as pd
dff = {
    'ID': [1, 2, 3, 4, 5, 6, 7],
    'Default': [1,1,0,1,0,1,0],
    'Default_Amount': [1200,2000,0,350,0,760,0],
    'Tot_Amount': [1200,2000,3400,350,10000,760,7500],
    'Time' : ['October','March','November','November','January','December','January'],
    'Class': ['A','B','A','A','B','B','A']
}
dff = pd.DataFrame(dff)
display(dff)

dff[(dff.Time != 'November') & (dff.Default == 1) ]

我想要做的是排除数据框中具有以下两个条件的行:时间 = 11 月,默认值 = 1(即数据框中的 ID 4)。

但是,如果我执行此代码“ dff[(dff.Time != 'November') & (dff.Default == 1) ] ”,它还会排除其他时间 =“November”,默认值 = 0。

我怎样才能避免这个问题?

提前致谢!

您需要匹配不等于dff.Default != 1与按位OR by |

df = dff[(dff.Time != 'November') | (dff.Default != 1) ]

或反转掩码,但更改| &用于按位AND并将!=更改为==

df = dff[~((dff.Time == 'November') & (dff.Default == 1)) ]

这是简单的布尔代数

要么遵循德摩根定律,要么在得到 OR ( | ) 时反转这两个条件:

dff[(dff.Time != 'November') | (dff.Default != 1) ]

或添加( & )你的两个条件,并否定( ~ ):

dff[~((dff.Time == 'November') & (dff.Default == 1)) ]

你为什么不简单地使用

dff[dff.ID != 4]

否则你可以使用

dff[~((dff.Time == 'November') & (dff.Default == 1))]

您的代码的问题是(dff.Time != 'November')首先选择所有非 11 月行,然后(dff.Default == 1)仅选择默认为 '1' 的所有行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM