来自列表和过滤器的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