簡體   English   中英

根據具有值的 2 列過濾 dataframe

[英]Filter dataframe based on 2 columns with values

我有一個 dataframe

國家 價值觀
BG 20
BG 4個
BG 3個
BG -3
BG -20
20
3個
-20
IND 20
IND -2
國標 30
國標 3個
國標 -30

我想以這樣的方式過濾 dataframe,即來自 BG 和 GB 的值應該 < absolute (5) 並且所有其他國家/地區應該 < 5 這樣 dataframe 就變成了

國家 價值觀
BG 4個
BG 3個
BG -3
3個
-20
IND -2
國標 3個

你可以使用面具:

mask = (df['values'].mask(df['country'].isin(['BG', 'GB']), # if BG/GB
                          df['values'].abs())               # get abs
                    .lt(5)                                  # now is it < 5?
        )
df[mask]

output:

   country  values
1       BG       4
2       BG       3
3       BG      -3
6       DE       3
7       DE     -20
9      IND      -2
11      GB       3

備選方案:使用顯式條件

# is country GB or GB?
m1 = df['country'].isin(['BG', 'GB'])
# is abs(value) < 5?
m2 = df['values'].abs().lt(5)
# is value < 5?
m3 = df['values'].lt(5)

df[(m1&m2)|(~m1&m3)]   # for GB/BG get mask m2, else get mask m3

利用:

df[((df['country'].isin(['BG', 'GB']))&(df['values'].abs()<5))|((df['values']<5)&(~df['country'].isin(['BG', 'GB'])))]

或者更簡單地說:

df[(~(df['country'].isin(['BG', 'GB']))&(df['values']<5))|(df['values'].abs()<5)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM