2016-08-30 2 views
2

У меня есть dataframe из файла CSV, который имеет 61 столбцов и 1mil строк. 25 из этих столбцов (Flag_1, Flag_2, ..., Flag_25) имеют значения True/False как значения для каждой строки кадра данных.Loop через несколько столбцов в dataframe

То, что я пытаюсь сделать, - это цикл через каждый столбец, чтобы определить, есть ли True для всей этой строки внутри этих столбцов, мне просто нужно как минимум одно истинное. Если есть True, то новый столбец, Flag_All будет иметь значение True для этой строки, если нет, то False.

можно использовать для цикла для одного столбца, как это так,

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

, но не может выяснить для нескольких столбцов.

ответ

0

Пожалуйста, попробуйте:

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

Более подробную информацию о любой()http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.any.html

+0

это работало замечательно, но мне интересно, если у меня есть другие «флаги» бы это не выбрать «корректировочные в этих столбцах? Как ограничить это только столбцами FLAG_1 через FLAG_25? –

+0

вычислил элемент столбца. Спасибо вам за помощь. –

4

Учитывая пример dataframe из:

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

Вы можете использовать df.filter, чтобы получить соответствующие столбцы (те, которые начинаются с флага, подчеркивание, а затем цифры ...), затем примените any() acr уги оси строк, чтобы получить общее булево столбец:

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

, который дает вам:

flag_1 flag_2 flag_3 flag_all 
0 False False True  True 
1 False False False False 
2 True False False  True 
Смежные вопросы