[英]Pandas groupby column values from a list and filter
我有一個 pandas dataframe 像這樣:
id variable year
1 a 2020
1 a 2030
1 a 2040
1 a 2050
1 b 2020
1 b 2030
1 b 2040
1 b 2050
1 c 2020
1 c 2030
1 c 2040
1 c 2050
現在對於列表var = ['a','b']
中的變量,我只想保留 2020 和 2030 行。 而對於變量的 rest(即上例中的c
),我想保留 2020、2030 和 2040 行。 因此最終的 dataframe 應該是:
id variable year
1 a 2020
1 a 2030
1 b 2020
1 b 2030
1 c 2020
1 c 2030
1 c 2040
我怎樣才能做到這一點?
將Series.isin
與 chain by |
一起使用對於按位OR
, &
對於按位AND
以及~
對於反轉掩碼:
var = ['a','b']
var1 = [2020,2030]
var2 = [2020,2030,2040]
m1 = df['variable'].isin(var)
m2 = df['year'].isin(var1)
m3 = df['year'].isin(var2)
df = df[(m1 & m2) | (~m1 & m3)]
print (df)
id variable year
0 1 a 2020
1 1 a 2030
4 1 b 2020
5 1 b 2030
8 1 c 2020
9 1 c 2030
10 1 c 2040
提供的優秀解決方案的替代方法是使用查詢方法:
search_criteria = "variable in ('a','b') and year in (2020, 2030) or variable=='c' and year in (2020, 2030, 2040)"
df.query(search_criteria)
id variable year
0 1 a 2020
1 1 a 2030
4 1 b 2020
5 1 b 2030
8 1 c 2020
9 1 c 2030
10 1 c 2040
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.