簡體   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