如何过滤Pandas列中没有特定值的人的id和name

klr1opcd  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(139)

我有这个 Dataframe :

id      name       update
1      andre       torch2
2      paulo       stock_opt
3      Manuela     length
1      andre       stock
3      Manuela     torch2

如何查询update列上没有torch2的用户的idname
输出应为:

id      name       update  
2      paulo       stock_opt

我该怎么做呢?

bzzcjhmw

bzzcjhmw1#

如果torch2不存在,则通过与Series.ne进行比较,并通过GroupBy.transformGroupBy.all进行测试,然后通过boolean indexing进行过滤,从而获得idname的所有组:

df1 = df[df['update'].ne('torch2').groupby([df['id'],df['name']]).transform('all')]
print (df1)
   id   name     update
1   2  paulo  stock_opt

或者通过DataFrame.set_index创建MultiIndex,测试是否等于torch2并过滤掉Index.isin中的索引:

s = df.set_index(['id','name'])['update']
df1 = df[~s.index.isin(s.index[s.eq('torch2')])]
print (df1)
   id   name     update
1   2  paulo  stock_opt

对于相反的相等比较,并测试是否至少有一个GroupBy.any匹配:

df2 = df[df['update'].eq('torch2').groupby([df['id'],df['name']]).transform('any')]
print (df2)
   id     name  update
0   1    andre  torch2
2   3  Manuela  length
3   1    andre   stock
4   3  Manuela  torch2

或删除反转遮罩的~

s = df.set_index(['id','name'])['update']
df2 = df[s.index.isin(s.index[s.eq('torch2')])]
print (df2)
   id     name  update
0   1    andre  torch2
2   3  Manuela  length
3   1    andre   stock
4   3  Manuela  torch2

相关问题