2016-08-02 18 views

Antwort

2

Ich glaube, Sie können überprüfen, ob alle Werte True in Vergleich Teilmenge ['xk', 'yk'] von all sind:

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

Eine andere Lösung ist zweite Bedingung hinzuzufügen, mit &:

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

Probe:

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] 

Zweite Lösung ist schneller:

#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

Danke, das perfekt funktioniert, was ist, wenn ich wollte nur den Index der bestimmten Zeile zurückzukehren, anstatt die Liste aller Indizes der Rückkehr – WGP

+0

Ich bin nicht sicher, ob zu verstehen. Wenn verwenden 'df = pd.DataFrame ({'xk': [0,2,0], 'yk': [0,5,0], 'aa': [0,1,0]}) print (df) 'und dann erhalten Sie DataFrame -' a = (df.ix [(df ['xk'] == 0) & (df ['yk'] == 0)]) '. Brauchen Sie z. erster Index oder zweiter Indexwert nach Position? – jezrael