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) ]
我想做的是排除数据框中具有以下两个条件的行:time = November with default = 1(即数据框中的 ID 4)。
但如果我执行此代码“dff[(dff.Time != 'November') & (dff.Default == 1) ]
”,它也会排除其他时间 =“11 月”和默认值 = 0。
如何避免这个问题?
提前致谢!
您需要通过 |
:
将 dff.Default != 1
与按位 OR
进行匹配
df = dff[(dff.Time != 'November') | (dff.Default != 1) ]
或反转掩码,但将 |
更改为 &
按位 AND
并将 !=
更改为 ==
:
df = dff[~((dff.Time == 'November') & (dff.Default == 1)) ]
这是简单的布尔代数
要么遵循 De Morgan's law 并在获得 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')
首先选择所有 non-November 行,然后 (dff.Default == 1)
选择所有默认为“1”的行。
当我需要按数据框排除某些行时,我遇到了问题。
这里是代码:
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) ]
我想做的是排除数据框中具有以下两个条件的行:time = November with default = 1(即数据框中的 ID 4)。
但如果我执行此代码“dff[(dff.Time != 'November') & (dff.Default == 1) ]
”,它也会排除其他时间 =“11 月”和默认值 = 0。
如何避免这个问题?
提前致谢!
您需要通过 |
:
dff.Default != 1
与按位 OR
进行匹配
df = dff[(dff.Time != 'November') | (dff.Default != 1) ]
或反转掩码,但将 |
更改为 &
按位 AND
并将 !=
更改为 ==
:
df = dff[~((dff.Time == 'November') & (dff.Default == 1)) ]
这是简单的布尔代数
要么遵循 De Morgan's law 并在获得 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')
首先选择所有 non-November 行,然后 (dff.Default == 1)
选择所有默认为“1”的行。