簡體   English   中英

Pandas groupby 列表中的列值和過濾器

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

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