Sim*_*mon 5 python dataframe pandas
假设我有一个这样的数据帧:
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
Run Code Online (Sandbox Code Playgroud)
出于测试目的,可以使用此生成以上内容:
test = pd.DataFrame({'id': np.array([1,2,3,4] * 2,dtype='int32'),
'num': np.array([1,2] * 4,dtype='int32')
})
Run Code Online (Sandbox Code Playgroud)
现在,我想只保留满足特定条件的行:id不是1 num而不是1.本质上我想删除索引为0和4的行.对于我的实际数据集,它更容易删除我不想要的行而不是指定我想要的行
我试过这个:
test = test[(test['id'] != 1) & (test['num'] != 1)]
Run Code Online (Sandbox Code Playgroud)
但是,这给了我这个:
id num
1 2 2
3 4 2
5 2 2
7 4 2
Run Code Online (Sandbox Code Playgroud)
它似乎删除了id1 OR num为1的所有行
我已经看到了其他一些问题,其答案是我上面使用的那个,但在我的案例中它似乎没有成功
EdC*_*ica 12
如果将布尔条件更改为相等并通过将两者括在另外的括号中来反转组合布尔条件,那么您将获得所需的行为:
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
Run Code Online (Sandbox Code Playgroud)
我也认为你对布尔语法的理解不正确你想要的是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
Run Code Online (Sandbox Code Playgroud)
如果您考虑这意味着什么,第一个条件排除了'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
Run Code Online (Sandbox Code Playgroud)
所以你真的想or(|)上述条件
| 归档时间: |
|
| 查看次数: |
6624 次 |
| 最近记录: |