python - 返回包含特定值的多索引 df 中的行
问题描述
我有以下多索引df:
pageid
sid vid
1 ABC dog
ABC cat
ABC fish
2 DEF pig
DEF cat
DEF fish
3 GHI pig
GHI cat
GHI dog
我想保留只包含一些值的子索引——在这个例子中我将使用 dog。
前:
pageid
sid vid
1 ABC dog
ABC cat
ABC fish
2 DEF pig
DEF cat
DEF fish
3 GHI pig
GHI cat
GHI dog
之后(仅sid
包含pageid
带有值的狗)
pageid
sid vid
1 ABC dog
ABC cat
ABC fish
3
GHI pig
GHI cat
GHI dog
解决方案
这里:
df.groupby('sid').filter(lambda x: x['pageid'].eq('dog').sum() > 0)
它是做什么的:
- 按 ID 获取子 DF 的列表
- 仅采用其中计数
pageid
大于的那些组0
或如@db 建议的那样:
df.loc[df['pageid'].eq('dog').groupby('sid').transform(any)]
那是做什么的:
- 创建一个掩码,其中每行是
True
ifpageId
isdog
,False
否则 - 按以下方式对屏蔽的行进行分组
sid
- 将每组屏蔽行转换为一个屏蔽行
- 使用该掩码从数据框中获取多组行
推荐阅读
- algorithm - 为什么 d-heap 对主存比二叉堆更有用?
- html - 输入类型文本的填充不使用引导程序 4 在 IE 11 中显示占位符和键入的文本
- gradle - 为什么当我将 github 操作 CI 用于 gradle 项目时,我会遇到“./gradlew: Permission denied”错误?
- javascript - 刷新页面时保存状态 - ReactJS
- c# - 如何根据绑定属性设置 WPF 数据网格的样式
- single-sign-on - SSO:Google 上的授权用户管理与其他 IdP
- php - 使用嵌套数组和计数更新和扩展帖子元
- python - 如果字典的键在过滤列表中,如何过滤字典列表?
- python - 如何在 Chainer 中测量每层的时间
- android - android Q上是否有不同的小部件设置?