python - pandas multiindex - 根据子索引的数量删除行
问题描述
这是我的数据框:
df = pd.DataFrame(pd.DataFrame({"C1" : [0.5, 0.9, 0.1, 0.2, 0.3, 0.5, 0.2],
"C2" : [200, 158, 698, 666, 325, 224, 584],
"C3" : [15, 99, 36, 14, 55, 62, 37]},
index = pd.MultiIndex.from_tuples([(0,0), (1,0), (1,1), (2,0), (2,1), (3,0), (4,0)],
names=['L1','L2'])))
东风:
C1 C2 C3
L1 L2
0 0 0.5 200 15
1 0 0.9 158 99
1 0.1 698 36
2 0 0.2 666 14
1 0.3 325 55
3 0 0.5 224 62
4 0 0.2 584 37
我想保留在 L1 子索引中只有一个值的行(在这种情况下为 0)以获得类似的结果:
C1 C2 C3
L1 L2
0 0 0.5 200 15
3 0 0.5 224 62
4 0 0.2 584 37
拜托,如果你有解决这个问题的任何线索,你能告诉我吗?
真挚地
解决方案
GroupBy.transform
由第一级与任何列使用并GroupBy.size
比较Series.eq
和过滤boolean indexing
:
df1 = df[df.groupby(level=0)['C1'].transform('size').eq(1)]
或者提取第一级的索引,并使用Index.get_level_values
倒置掩码过滤所有的欺骗:~
Index.duplicated
keep=False
df1 = df[~df.index.get_level_values(0).duplicated(keep=False)]
推荐阅读
- arangodb - Arango 数据库复制应用程序不工作
- flutter - 为颤振和飞镖定义一个 linter 规则
- cordova - Ionic 4 - Cordova 插件指纹 AIO - 禁用面部识别(指纹多合一)
- c# - 使用 String.Format("{0:C}",45) 此代码时获取 ₹ 的货币格式
- python - 必须随机生成数字才能在 python 中匹配?
- python - 如何在烧瓶 JSON 响应中显示多个值
- mysql - 在 Cypress 中获取“客户端不支持服务器请求的身份验证协议;考虑升级 MySQL 客户端”
- javascript - 如何动态渲染美人鱼流程图?
- typescript - 使用属性访问器的打字稿不解析接口
- amazon-s3 - 将具有特定标题或具有关键字“日志”的标题的文件从 S3 存储桶复制到另一个存储桶中的文件夹