来自列表和过滤器的Pandasgroupby列值

我有一个像这样的熊猫数据框:

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 行。而对于其余变量(即c在上面的示例中),我想保留 2020、2030 和 2040 行。因此最终的数据帧应该是:

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由链|按位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


以上是来自列表和过滤器的Pandasgroupby列值的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>