pandas中如何删除pivot_table生成透视表的指定行
原因说明
你写的drop语句不生效,核心是没搞懂当前透视表的结构:
- 你用pivot_table生成表时,
TierA、TierB被设为了多层行索引(MultiIndex),不是普通列 - 此时表的有效行标签是两层索引组合成的元组,分别是
(1,1)、(2,0)、(2,2) - 你之前传入的
'TierA'、'count'这类字符串既不是合法的行标签,也不符合多层索引的删除规则,pandas匹配不到目标行,自然不会有删除效果。
具体操作方法
两种常用方案都能实现需求,你可以根据场景选择:
方法1:按索引标签直接删除
如果明确要删除的行对应的索引值,直接把两层索引的取值拼成元组传入drop即可:
table = table.drop((2, 0), axis=0)
这是最简洁的写法,执行后会直接移除TierA=2、TierB=0对应的行。
方法2:条件过滤删除
如果需要按规则批量删除,或者不想硬编码索引值,可以用布尔索引过滤:
# 写法1:按索引层级匹配要删除的行 table = table[~( (table.index.get_level_values("TierA") == 2) & (table.index.get_level_values("TierB") == 0) )] # 写法2:直接按统计值过滤,删除所有计数为0的行(和你当前场景匹配度更高) table = table[table[("count", "Value (millions)")] != 0]
最终效果
执行完删除操作后,得到的透视表如下:
count sum Value (millions) Value (millions) TierA TierB 1 1 6 400 2 2 1 300
内容的提问来源于stack exchange,提问作者Noobcoder
相关产品推荐
相关产品推荐

