2016-08-02 67 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

相關問題