Определение индексов, в которых любой из множества столбцов имеет определенное значение?

#pandas #filtering

Вопрос:

Мне нужно определить, какие индексы в фрейме данных имеют любой из набора столбцов, имеющих указанное значение. В фрейме данных несколько сотен столбцов, и несколько десятков мне нужно использовать для фильтрации, поэтому нецелесообразно записывать их все. Моя стратегия заключается в следующем: определить индексы, в которых любой столбец с именем «temp» равен 1:

 columns = [col for col in df.columns if 'temp' in col]
indices = list(np.where(df[columns]==1)[0])
 

Однако это возвращает неожиданный результат — кажется, что он возвращает значение для каждого отдельного индекса в df. Есть какие-нибудь зацепки, где все идет не так?

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

1. Одно из импровизированных решений, о котором я подумал, — это просто создать отдельный df, отфильтрованный только для интересующих столбцов (df_temp = df[столбцы]), а затем найти любые строки со значениями 1 в любом столбце (df_temp.где(df_temp==1) ? )

Ответ №1:

Вы могли бы попробовать это:

 import pandas as pd

# Toy dataframe: two columns have "temp" in their name
# and rows 0 and 3 have a value of 1
df = pd.DataFrame(
    {"SJDRtemp": [0, 0, 0, 1], "TR": [0, 0, 2, 1], "LDtemp": [1, 3, 0, 0]}
)

# Select columns which name contains "temp"
columns = [col for col in df.columns if "temp" in col]

# Get indices of rows where "temp columns" have a value of 1
indices = list(df[df[columns] == 1].dropna(how="all").index)

print(indices)
# Outputs
[0, 3]