根据多种条件删除行Python Pandas [英] Deleting rows based on multiple conditions Python Pandas
问题描述
我想在满足一些条件时删除行:
I want to delete rows when a few conditions are met:
例如,生成一个随机的DataFrame:
For instance, a random DataFrame is generated:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 4), columns=['one', 'two', 'three', 'four'])
print df
表的一个实例如下所示:
one instance of table is shown as below:
one two three four
0 -0.225730 -1.376075 0.187749 0.763307
1 0.031392 0.752496 -1.504769 -1.247581
2 -0.442992 -0.323782 -0.710859 -0.502574
3 -0.948055 -0.224910 -1.337001 3.328741
4 1.879985 -0.968238 1.229118 -1.044477
5 0.440025 -0.809856 -0.336522 0.787792
6 1.499040 0.195022 0.387194 0.952725
7 -0.923592 -1.394025 -0.623201 -0.738013
8 -1.775043 -1.279997 0.194206 -1.176260
9 -0.602815 1.183396 -2.712422 -0.377118
我要根据以下条件删除行:
I want to delete rows based on the conditions that:
行的col'一个','两个',或'三'的值大于0;
Row with value of col 'one', 'two', or 'three' greater than 0; and value of col 'four' less than 0 should be deleted.
然后我尝试实现如下:
df = df[df.one > 0 or df.two > 0 or df.three > 0 and df.four < 1]
但是,导致出现如下错误消息:
However, resulting in a error message as follow:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
有人可以帮助我如何基于多个条件删除吗?
Could someone help me on how to delete based on multiple conditions?
推荐答案
出于以下原因对我来说不是100%清楚,pandas
与按位逻辑运算符|
和&
配合很好,但对布尔运算符or
和and
却不满意.
For reasons that aren't 100% clear to me, pandas
plays nice with the bitwise logical operators |
and &
, but not the boolean ones or
and and
.
尝试以下方法:
df = df[(df.one > 0) | (df.two > 0) | (df.three > 0) & (df.four < 1)]
这篇关于根据多种条件删除行Python Pandas的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!