2016-08-02 46 views

回答

2

我想你可以检查是否所有值都True相比集['xk', 'yk']通过all

b = df[(df[['xk', 'yk']] == 0).all(1)].index.tolist() 

另一种解决方案是增加第二个条件与&

b = (df[(df['xk'] == 0) & (df['yk'] == 0)].index.tolist()) 

样品:

df = pd.DataFrame({'xk':[0,2,3], 
        'yk':[0,5,0], 
        'aa':[0,1,0]}) 

print (df) 
    aa xk yk 
0 0 0 0 
1 1 2 5 
2 0 3 0 

b = df[(df[['xk', 'yk']] == 0).all(1)].index.tolist() 
print (b) 
[0] 

b1 = (df[(df['xk'] == 0) & (df['yk'] == 0)].index.tolist()) 
print (b1) 
[0] 

第二种解决方案是更快:

#length of df = 3k 
df = pd.concat([df]*1000).reset_index(drop=True) 

In [294]: %timeit df[(df[['xk', 'yk']] == 0).all(1)].index.tolist() 
1000 loops, best of 3: 1.21 ms per loop 

In [295]: %timeit (df[(df['xk'] == 0) & (df['yk'] == 0)].index.tolist()) 
1000 loops, best of 3: 828 µs per loop 
+0

谢谢,非常完美,约,如果我想返回特定行的只是指数,而不是返回所有索引列表的 – WGP

+0

什么我不知道,如果知道。如果使用'df = pd.DataFrame({'xk':[0,2,0], 'yk':[0,5,0], 'aa':[0,1,0]}) 打印(df)'然后你得到DataFrame - 'a =(df.ix [(df ['xk'] == 0)&(df ['yk'] == 0)])''。你需要返回第一指数或第二指数值按位置? – jezrael

相关问题