#python #pandas
#python #pandas
Вопрос:
У меня есть фрейм данных, подобный этому, например:
df = pd.DataFrame({'A':['a', 'a', 'b', 'c', 'a', 'b',], 'B': [1, 2, 3, 4, 5, 6,]})
Что мне нужно, так это отфильтровать df на основе значения в столбце ‘A’. Проблема в том, что значения для фильтрации предоставляются конечным пользователем. Например:
cond = ['a', 'b']
означает, что пользователь хочет отфильтровать df и сохранить все значения ‘a’ и ‘b’ в столбце ‘A’. Итак, в этом случае мне нужно будет отфильтровать df с этим условием:
df = df.loc[(df['A'] == 'a') | (df['A'] == 'b')]
Но в следующий раз значения в cond
списке могут отличаться, и мне нужно это учитывать. До сих пор я пробовал for
цикл. Я был почти уверен, что это не сработает … и это не сработало:
for item in cond:
df = df.loc[df['A'] == item]
Я также пытался создать генератор под df.query()
и возлагал на это большие надежды, но это тоже не сработало. К сожалению, метод не принимает генераторы:
df = df.query(f'A == {x}' for x in cond)
# or
df = df.query('A == @x' for x in cond)
Не совсем уверен, что еще попробовать. Кто-нибудь сталкивался с этим типом проблемы раньше?
Ответ №1:
Вы можете попробовать с
df = df.loc[df['A'].isin(cond)]
Ответ №2:
Также можно попробовать в качестве альтернативы @BEN_YO
df.query('A==@cond')