我有以下数据框:
id stat_day x y
0 2016-03-29 0 3
1 2016-03-29 0 4
2 2016-03-30 0 2
如何删除x
和y
等于零的行?
答案 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)]
在您的示例中,没有这样的行(x
和y
都是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)]