可以说我有一个像这样的数据框:

   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/

10-12 14:27
查看更多