[英]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.