2016-08-30 2 views
2

Ich habe einen Datenrahmen aus einer CSV-Datei, die 61 Spalten und 1mil Zeilen hat. 25 dieser Spalten (Flag_1, Flag_2, ..., Flag_25) haben True/False als Werte für jede Zeile des Datenrahmens.Schleife über mehrere Spalten im Datenrahmen

Was ich versuche zu tun ist Schleife durch jede Spalte, um festzustellen, ob es ein True für die gesamte Zeile innerhalb dieser Spalten gibt, ich brauche nur ein Minimum von einem wahren. Wenn eine True-Spalte vorhanden ist, wird Flag_All einen True-Wert für diese Zeile haben, andernfalls False.

kann ich die for-Schleife für eine einzelne Spalte wie so verwenden

for index, x in data2['FLAG_1'].iteritems() : 
    data2['FLAG_ALL'] = data2['FLAG_1'] == True 

kann aber für mehrere Spalten nicht herausgefunden.

Antwort

0

Bitte versuchen:

data2['FLAG_ALL'] = data2.any(axis=1,bool_only=True).values 

Weitere Informationen über jede()http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.any.html

+0

dieser große gearbeitet, aber ich frage mich, wenn ich andere „flags“ haben würde nicht wählen Sie die ‚True Auch in diesen Spalten? Wie würde ich dies auf die Spalten FLAG_1 bis FLAG_25 beschränken? –

+0

fand das Spaltenelement davon heraus. Danke für die Hilfe. –

4

ein Beispiel Datenrahmen von Gegeben:

df = pd.DataFrame({ 
    'flag_1': [False, False, True], 
    'flag_2': [False, False, False], 
    'flag_3': [True, False, False]}) 

Sie können df.filter verwenden Sie die entsprechenden Spalten zu erhalten (diejenigen, die mit einem Flag beginnen, einem Unterstrich und dann Ziffern ...), dann wenden Sie any() Acr an oss die Zeilenachse Ihre allgemeine boolean Spalte zu erhalten:

df['flag_all'] = df.filter(regex='^flag_\d+$').any(axis=1) 

Welche gibt Ihnen:

flag_1 flag_2 flag_3 flag_all 
0 False False True  True 
1 False False False False 
2 True False False  True 
Verwandte Themen