pandas如何将双层MultiIndex第一层转成行索引、第二层转成列索引
解决方案
你要实现的多层索引转置需求,直接用pandas内置的unstack()方法就能搞定,不需要手动遍历构造数据,写法非常简洁而且完全通用,不限制第二层索引的类型。
完整精简实现代码如下:
import pandas as pd from random import choice products=['car', 'pen', 'kitchen', 'bed'] df=pd.DataFrame([{'product': choice(products), 'Changing': choice([True, False])} for _ in range(10000)]) # 一行完成分组计数+索引重塑,自动将第一层行索引留为行、第二层行索引转为列 result = df.groupby(['product', 'Changing']).size().unstack(fill_value=0) # 可选:修改列名匹配你需要的输出效果 result = result.rename(columns={False: 'not changing', True: 'changing'}) print(result)
方法说明
unstack()是pandas专门用于多层行索引转列索引的内置方法,默认对最内层的行索引做转换,刚好适配你这里两层索引的场景;如果你有更多层索引,可以通过level参数指定要转为列的索引层。- 加入
fill_value=0参数可以自动将缺失的分组计数填充为0,避免出现空值,鲁棒性更强。 - 该方法完全不限制第二层索引的取值类型,布尔值、字符串、数值都可以直接使用,不需要提前预设索引的取值范围,通用性拉满。
内容的提问来源于stack exchange,提问作者jan-seins
相关产品推荐
相关产品推荐

