gpt4 book ai didi

Python pandas 删除不满足多个条件的行

转载 作者:太空狗 更新时间:2023-10-30 00:31:27 25 4
gpt4 key购买 nike

假设我有一个这样的数据框:

   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 AND 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 条件,那么您将获得所需的行为:

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 语法的理解不正确您想要的是条件:

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

所以你真的想要 (|) 上述条件

关于Python pandas 删除不满足多个条件的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38825087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com