如何根据特定条件从pandas数据帧中删除行

时间:2017-04-18 04:03:18

标签: python pandas

我有以下数据框:

id       stat_day         x    y
0       2016-03-29        0    3
1       2016-03-29        0    4
2       2016-03-30        0    2 

如何删除xy等于零的行?

3 个答案:

答案 0 :(得分:2)

考虑数据框df

np.random.seed([3,1415])
df = pd.DataFrame(np.random.choice([0, 1], (10, 2)), columns=['x', 'y'])

   x  y
0  0  1
1  0  1
2  0  0
3  1  0
4  1  1
5  1  1
6  0  1
7  1  0
8  1  0
9  0  0

选项1
pd.DataFrame.query

df.query('x != 0 or y != 0')

   x  y
0  0  1
1  0  1
3  1  0
4  1  1
5  1  1
6  0  1
7  1  0
8  1  0

选项2
布尔切片

df[df.x.ne(0) | df.y.ne(0)]

   x  y
0  0  1
1  0  1
3  1  0
4  1  1
5  1  1
6  0  1
7  1  0
8  1  0

选项3
布尔切片需要2

df[df.astype(bool).any(1)]

   x  y
0  0  1
1  0  1
3  1  0
4  1  1
5  1  1
6  0  1
7  1  0
8  1  0

答案 1 :(得分:0)

这将完成这项工作:

import pandas as pd
df=pd.DataFrame({'stat_day':['2016-03-29','2016-03-29','2016-03-30'],'x':[0,0,0],'y':[3,4,2]})
df=df.loc[df[['x','y']].values.any(axis=1)]

在您的示例中,没有这样的行(xy都是0),因此df将保持不变,但如果您定义它以便在第一行两者都是0,就像那样:

import pandas as pd
df=pd.DataFrame({'stat_day':['2016-03-29','2016-03-29','2016-03-30'],'x':[0,0,0],'y':[0,4,2]})
df=df.loc[df[['x','y']].values.any(axis=1)]

然后df

    stat_day    x   y
1   2016-03-29  0   4
2   2016-03-30  0   2

答案 2 :(得分:0)

当x和y都为零时,您可以创建一个等于False的布尔系列,否则创建True。这转化为df.x != 0 | df.y !=0。因此,这样的事情可能有用:

df = df[(df.x != 0) | (df.y != 0)]