aps1_risk.head()
Out[33]:
ID class S3 S22 S23 S26_3 S28 S29
0 1 1 45698 1012 268 287230 0 10
1 2 0 0 0 0 154298 86 454
2 3 0 228 358 110 254892 128 202
在这个给定的数据集中,我需要删除class = 1的所有行,如果任何其他变量= 0.我想过使用if else条件,但是有更简单的替代方法吗?任何帮助将不胜感激。感谢。
答案 0 :(得分:2)
df = aps1_risk[aps1_risk.drop('class', 1).ne(0).all(1) | aps1_risk['class'].ne(1)]
通过~
反转最终掩码的替代解决方案:
df = df[~(df.drop('class', 1).eq(0).any(1) & df['class'].eq(1))]
print (df)
ID class S3 S22 S23 S26_3 S28 S29
1 2 0 0 0 0 154298 86 454
2 3 0 228 358 110 254892 128 202
<强>详细强>:
如果不class
,那么对于all
的行的每个值,如果不等于0
,则比较所有列:
print (df.drop('class', 1).ne(0).all(1))
0 False
1 False
2 True
dtype: bool
比较列,如果不等于1
:
print (df['class'].ne(1))
0 False
1 True
2 True
Name: class, dtype: bool
连锁条件:
print (df.drop('class', 1).ne(0).all(1) | df['class'].ne(1))
0 False
1 True
2 True
dtype: bool
所以它过滤了True
s:
df = aps1_risk[aps1_risk.drop('class', 1).ne(0).all(1) | aps1_risk['class'].ne(1)]
print (df)
ID class S3 S22 S23 S26_3 S28 S29
1 2 0 0 0 0 154298 86 454
2 3 0 228 358 110 254892 128 202
答案 1 :(得分:0)
Pandas允许您使用非常简单的选择语法:
aps1_risk = aps1_risk[aps1_risk['class'] != 1]
或者你可以像这样轰炸更复杂的查询:
aps1_risk = aps1_risk[(aps1_risk['class'] != 1) | (aps1_risk.drop('class', 1) == 0)]