[英]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.