2017-03-31 5 views
2
a=pd.DataFrame({'a1':[1,2,3,4],'a2':[5,6,7,8]}) 
c=pd.DataFrame({'c1':[True,False,True,True],'c2':[True,False,False,True]}) 

Wie kann ich den Index der Elemente in Spalten a1 und a2 erhalten, die True in Spalten sind c1 und c2 jeweils?erhalten Index der Boolesche Werte in Pandas - Python

Der Index der a1 sollte [0,2,3] und den Index der a2[0,3] sein. Das Ergebnis könnte eine Liste von Indizes wie [[0,2,3],[0,3]] sein.

Antwort

3

Ich glaube, Sie where brauchen:

c.columns = a.columns 
df1 = a.where(c) 
idx = [df1[x].dropna().index.tolist() for x in df1] 
print (idx) 
[[0, 2, 3], [0, 3]] 

Eine andere Lösung:

c.columns = a.columns 
idx = list(a.where(c).stack().reset_index() 
      .groupby('level_1')['level_0'].apply(list)) 
print (idx) 
[[0, 2, 3], [0, 3]] 
+0

Danke für Ihre Antwort. Gibt es keine Möglichkeit, dies zu tun, ohne jede Spalte explizit angeben zu müssen? Mein Datenrahmen hat viele Spalten wie a1, a2, a3 usw. – HappyPy

2

Es ist nicht klar, was Sie genau wollen.

Dies ist ein Ansatz mit stack

a.stack().index[c.stack().values].to_series() 

0 a1 (0, a1) 
    a2 (0, a2) 
2 a1 (2, a1) 
3 a1 (3, a1) 
    a2 (3, a2) 
dtype: object 

Wenn Sie nur die Liste der Index wollen Werte

a.index.values[c.values.any(1)] 

array([0, 2, 3]) 
Verwandte Themen