2016-06-06 1 views
1

У меня есть dataframe, похожий на это.Выбор столбцов с условием на Pandas DataFrame

col1 col2 
0 something1 something1 
1 something2 something3 
2 something1 something1 
3 something2 something3 
4 something1 something2 

Я пытаюсь фильтровать все строки, которые имеют something1 либо на col1 или col2. Если мне нужна логика состояния в столбце, я могу сделать это с df[df.col1 == 'something1'], но будет ли способ сделать это с помощью нескольких столбцов?

ответ

1

Вы можете использовать all с boolean indexing:

print ((df == 'something1').all(1)) 
0  True 
1 False 
2  True 
3 False 
4 False 
dtype: bool 

print (df[(df == 'something1').all(1)]) 
     col1  col2 
0 something1 something1 
2 something1 something1 

EDIT:

Если нужно выбрать только некоторые столбцы, которые вы можете использовать isin с boolean indexing для выбора желаемого columns, а затем использовать subset - df[cols]:

print (df) 
     col1  col2 col3 
0 something1 something1 a 
1 something2 something3 s 
2 something1 something1 r 
3 something2 something3 a 
4 something1 something2 a 

cols = df.columns[df.columns.isin(['col1','col2'])] 
print (cols) 
Index(['col1', 'col2'], dtype='object') 

print (df[(df[cols] == 'something1').all(1)]) 
     col1  col2 col3 
0 something1 something1 a 
2 something1 something1 r 
+0

Thanks jezrael! Дополнительный вопрос: если я хочу фильтровать определенные столбцы (скажем, только в col1 и col2, но у меня есть другие столбцы), знаете ли вы, как это сделать? Наверное, мне нужно заменить .all (1) чем-то еще? – user3368526

+0

hmmm, эти столбцы имеют общую часть имени столбца? - 'col' для' col1' и 'col2'? – jezrael

+0

О, например, если у меня есть col1, col2 и col3, но я хочу просмотреть только col1 и col2, но не col3. – user3368526