Python: Возвращает индекс столбца при выполнении условия

#python #arrays #pandas #list #numpy

Вопрос:

Я хотел бы получить индексы столбцов, учитывая, что они удовлетворяют определенному условию.

Например, я хотел бы получить индексы всех столбцов, содержащих 0. В этом случае это будет [0,1] —> (столбец A и столбец B).

 df = {'A': [0,1,2,3,4,5], 
      'B': [3,4,0,5,6,5], 
      'C': [1,2,3,4,5,6],
      'D': [7,8,9,8,7,6]} 

df = pd.DataFrame(df)
 

Спасибо!

Ответ №1:

Используйте np.где:

 index_array = np.where(df.eq(0).any())[0] # prints array([0, 1])
index_array = np.where(~df.eq(0).any())[0]  # prints array([2, 3])
 

В случае, если вам нужны имена столбцов:

 col_list = df.columns[df.eq(0).any()] # prints Index(['A', 'B'], dtype='object')
 

Комментарии:

1. Большое спасибо! Теперь я попытался вернуть все столбцы, которые не содержат «0», со следующим: index_array = set(np.where(df1 != 0)[1]), но он вернулся {0, 1, 2, 3, 4}. Не могли бы вы, пожалуйста, поправить меня в этом вопросе?

2. @student214 использовать: np.where(~df.eq(0).any())

Ответ №2:

Это должно вам помочь.

 (df == 0).any(axis=1)
op:
0     True
1    False
2     True
3    False
4    False
5    False
dtype: bool