可以说我有一个像这样的数据框:
id num
0 1 1
1 2 2
2 3 1
3 4 2
4 1 1
5 2 2
6 3 1
7 4 2
可以出于测试目的生成上面的内容:
test = pd.DataFrame({'id': np.array([1,2,3,4] * 2,dtype='int32'),
'num': np.array([1,2] * 4,dtype='int32')
})
现在,我只想保留满足特定条件的行:
id
不为1且num
不为1。本质上,我想删除索引为0和4的行。对于我的实际数据集,它更容易删除行不想而不是指定我想要的行我已经试过了:
test = test[(test['id'] != 1) & (test['num'] != 1)]
但是,这给了我这个:
id num
1 2 2
3 4 2
5 2 2
7 4 2
似乎已删除
id
为1或num
为1的所有行我已经看到了许多其他问题,答案是我在上面使用的答案,但对于我来说似乎并没有解决问题
最佳答案
如果将 bool 条件更改为相等并通过将两个 bool 条件括在其他括号中来反转组合的 bool 条件,那么您将获得所需的行为:
In [14]:
test = test[~((test['id'] == 1) & (test['num'] == 1))]
test
Out[14]:
id num
1 2 2
2 3 1
3 4 2
5 2 2
6 3 1
7 4 2
我还认为您对 bool 语法的理解是不正确的,您想要对条件进行
or
编码:In [22]:
test = test[(test['id'] != 1) | (test['num'] != 1)]
test
Out[22]:
id num
1 2 2
2 3 1
3 4 2
5 2 2
6 3 1
7 4 2
如果您考虑这意味着什么,则第一个条件会排除“id”等于1的任何行,并且对于“num”列也是如此:
In [24]:
test[test['id'] != 1]
Out[24]:
id num
1 2 2
2 3 1
3 4 2
5 2 2
6 3 1
7 4 2
In [25]:
test[test['num'] != 1]
Out[25]:
id num
1 2 2
3 4 2
5 2 2
7 4 2
所以您真的想
or
(|
)以上条件关于python - Python Pandas删除不满足多个条件的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38825087/