我有一个多索引数据框架,其形式为:

level0 level1 1 2 3 4 5
idx1 name1 0.0 0.0 0.0 0.0 0.0
name2 1.0 2.0 5.0 4.0 2.0
name3 1.0 4.0 2.0 6.0 8.0
idx2 name1 0.0 0.0 0.0 0.0 0.0
name2 4.0 2.0 9.0 5.0 5.0
name3 0.0 0.0 0.0 0.0 0.0
idx3 name1 0.0 0.0 0.0 0.0 0.0
name2 0.0 0.0 0.0 0.0 0.0
name3 4.0 7.0 6.0 5.0 1.0

我想删除在级别0的所有索引上都有零的行.对于所给的例子,(idx1,name1)、(idx2,name1)和(idx3,name1)应该go 掉.

我试过了: tmp.loc[~(tmp==0).all(axis=1)]个 但它会删除所有带零的行.

我找不到合适的面膜来得到我想要的东西.有人能帮帮忙吗?

推荐答案

如果我理解正确的话,您还需要应用groupby.transform来测试某个级别内的同质性:

tmp[(tmp!=0).any(axis=1).groupby(level='level1').transform('any')]

它与以下内容相同:

tmp[~(tmp==0).all(axis=1).groupby(level='level1').transform('all')]

输出:

                 1    2    3    4    5
level0 level1                         
idx1   name2   1.0  2.0  5.0  4.0  2.0
       name3   1.0  4.0  2.0  6.0  8.0
idx2   name2   4.0  2.0  9.0  5.0  5.0
       name3   0.0  0.0  0.0  0.0  0.0
idx3   name2   0.0  0.0  0.0  0.0  0.0
       name3   4.0  7.0  6.0  5.0  1.0

中间体:

                 1    2    3    4    5  (tmp!=0).any(axis=1)  (…).groupby(level='level1').transform('any')
level0 level1                                                                                             
idx1   name1   0.0  0.0  0.0  0.0  0.0                 False                                         False
       name2   1.0  2.0  5.0  4.0  2.0                  True                                          True
       name3   1.0  4.0  2.0  6.0  8.0                  True                                          True
idx2   name1   0.0  0.0  0.0  0.0  0.0                 False                                         False
       name2   4.0  2.0  9.0  5.0  5.0                  True                                          True
       name3   0.0  0.0  0.0  0.0  0.0                 False                                          True
idx3   name1   0.0  0.0  0.0  0.0  0.0                 False                                         False
       name2   0.0  0.0  0.0  0.0  0.0                 False                                          True
       name3   4.0  7.0  6.0  5.0  1.0                  True                                          True

Python-3.x相关问答推荐

"安装serial vs安装psyserial header,"""

Pandas groupby基于索引的连续列值相等

如何将CSV或FDF数据解析到Python词典并注入到模板PDF表单中?

CONNEXION.EXCEPTIONS.ResolverError:运行pyz文件时未命名模块

如何获得给定列表中所有可能的元素组合?

我想判断df_entry_log[AM_PM],并根据测试填充列

估计列表中连续对的数量

aiogram机器人中处理文本输入异常而不是按钮点击的回调函数.

数据框中从每个组/ID的底部删除行

如何将列表和字典逐行组合在一起

如何使用复选按钮更改 Pyplot 轴的属性?

过滤并获取数据框中条件之间的行

DynamoDB - boto3 - batch_write_item:提供的关键元素与架构不匹配

pip 找不到最新的软件包版本

删除括号和大括号中不必要的空格

运行 pip install -r requirements.txt 时出错

Python 类型提示语法如何/为什么起作用?

如何在 python 3.x 中禁用 ssl 判断?

如何将二进制(字符串)转换为浮点值?

混合全局/参数和名为top的函数的奇怪python行为