2017-08-31 2 views
2

Ich habe folgende Datenrahmen mit booleansReturn Spaltennamen in Datenrahmen mit boolean Check

Out[25]: 
       0  1  2 
Date       
2007-01-03 False True False 
2007-01-04 False False True 
2007-01-05 False True False 
2007-01-08 True False False 
2007-01-09 False True False 

Ich suche einen DF zu erhalten, die den Spaltenindex für die Spalte Wert ‚True‘ für jede Zeile zurückgibt.

Erforderliche Leistung:

  0 
Date       
2007-01-03 1 
2007-01-04 2 
2007-01-05 1 
2007-01-08 0 
2007-01-09 1 

was ist die beste Art und Weise pythonic diese pls zu tun?

Antwort

3

Wenn nur ein True pro Zeile Verwendung idxmax:

df['new'] = df.idxmax(axis=1) 
print (df) 
       0  1  2 new 
Date        
2007-01-03 False True False 1 
2007-01-04 False False True 2 
2007-01-05 False True False 1 
2007-01-08 True False False 0 
2007-01-09 False True False 1 

Wenn mehrere True s:

df['new'] = df.apply(lambda x: ','.join(x.index[x]), axis=1) 
print (df) 
       0  1  2 new 
Date         
2007-01-03 False True True 1,2 
2007-01-04 False False True 2 
2007-01-05 False True False 1 
2007-01-08 True False False 0 
2007-01-09 False True False 1 

Eine andere Lösung:

print (['{}, '.format(x) for x in df.columns]) 
['0, ', '1, ', '2, '] 

s = np.where(df, ['{}, '.format(x) for x in df.columns], '') 
df['new'] = pd.Series([''.join(x).strip(', ') for x in s], index=df.index) 
print (df) 
       0  1  2 new 
Date         
2007-01-03 False True True 1, 2 
2007-01-04 False False True  2 
2007-01-05 False True False  1 
2007-01-08 True False False  0 
2007-01-09 False True False  1 
+0

schön einfache Lösung. Habe nur ein wahres also mit idxmax. Sehr geschätzt. Vielen Dank! – steff

+0

Super, ich war besorgt um mehr Trues;) Froh kann dir helfen! – jezrael

+1

@steff vergessen Sie nicht, die Antwort zu akzeptieren :) – IanS

Verwandte Themen