python - 在 pandas 中使用 `isin(list1)` 来识别包含 list1 中所有项目的列中的值
问题描述
对于给定的 pandas 数据框,如下所示,
h1 h2 h3
mn a 1
mn b 1
rs b 1
pq a 1
we c 1
如果我使用过滤器isin()
,比如说df[df["h2"].isin(["a","b"])]["h1"].unique()
,它会导致以下结果:
h1
mn
rs
pq
我需要找到与列表中所有元素匹配的条目,而不是与列表中任何元素匹配的行为,即所需的输出应该是:
h1
mn
这究竟是如何实现的?里面列表的元素个数isin()
是任意的,可以多于2个。
解决方案
您可以将issubset
每个set
组用于掩码:
s = df.groupby('h1')['h2'].apply(lambda x: set(["a","b"]).issubset(x))
print (s)
h1
mn True
pq False
rs False
we False
Name: h2, dtype: bool
然后过滤索引值:
vals = s.index[s]
print (vals)
Index(['mn'], dtype='object', name='h1')
推荐阅读
- python - Django - 创建一个映射到多个不同页面的链接?
- excel - 满足3个条件的公式
- odata - 我可以在格式化程序中使用 oData 调用吗?
- php - 每当我使用隐藏字段检索数据时,它都会引发错误,我还想让标题区域响应
- tfs - TFS 2017 无法移动小部件
- javascript - ShellHeadItem 的扩展(渲染?)
- node.js - Mongoose Schema 上定义的实例方法的类型错误
- c# - 用于多窗口和多模型桌面应用程序的 MVC 模式
- ios - Xcode 工作区文件为空
- python - Flask - url_for() 即使在 request.get 修复后也缺少参数