繁体   English   中英

根据可变数量的条件过滤数据框

[英]Filtering dataframe based on variable number of conditions

例如,我有一个这样的数据框:

df = pd.DataFrame({'A':['a', 'a', 'b', 'c', 'a', 'b',], 'B': [1, 2, 3, 4, 5, 6,]})

我需要的是根据“A”列中的值过滤 df。 问题是要过滤的值是由最终用户提供的。 例如:

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)

不太确定还有什么要尝试的。 有没有人处理过这种类型的问题?

你可以试试

df = df.loc[df['A'].isin(cond)]

也可以尝试替代@BEN_YO

 df.query('A==@cond')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM