You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Pandas中稀疏多级索引显示是否为Bug?(附IPython环境信息)

疑问:双列多级索引未稀疏显示是否属于Pandas Bug?

先还原你的场景:在IPython 6.2.1、Python 3.6.4环境下执行这段代码:

import pandas as pd
from io import StringIO
data = """ code	name	typ	ntf
 A5411	WD	AF	
 A5411	WD	AF	210194618
 B5498	SH	NC	
 B5498	SH	NC	210213014
 """
df = pd.read_table(StringIO(data))

执行df.set_index(['name','code'])后,输出里的code索引在同一name分组下重复显示:

typ        ntf
name code              
WD   A5411  AF       NaN
     A5411  AF  210194618.0
SH   B5498  NC       NaN
     B5498  NC  210213014.0

而你期望的是像三级索引那样的稀疏显示效果:

ntf
name code typ           
WD   A5411 AF        NaN
          AF  210194618.0
SH   B5498 NC        NaN
          NC  210213014.0

嘿,这完全不是Pandas的Bug,而是它设计好的索引显示逻辑!

原因很直观:Pandas在展示多级索引的DataFrame时,只会对除最后一级之外的前序重复索引层级做空白省略——最后一级索引不管和上一行值重不重复,都会完整显示,用来明确标记每一行的索引位置。

在你的两级索引案例里,code是索引的最后一级,所以哪怕它和上一行完全相同,也会被显示出来;而三级索引时,typ是最后一级,前两级namecode因为连续重复,就会被稀疏隐藏。

如果真的想让两级索引也实现类似的稀疏效果,其实可以用个小技巧:比如临时把最后一级索引转成列,或者加个占位的空索引层级,但说实话,默认的显示方式其实更合理——当只有两级索引时,最后一级是区分行的关键标识(哪怕索引本身重复),显示出来能避免你混淆行的定位。

内容的提问来源于stack exchange,提问作者ZY Huang

火山引擎 最新活动