#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]