如何基于复合索引中的列透视DataFrame?求更优雅方案
更优雅的透视解决方案
你遇到的KeyError: 'ts'是因为pivot的index/columns参数要求传入列名,而你已经把ts和code设为了复合索引,它们不再属于DataFrame的列,因此无法被pivot识别。以下是几种更简洁的解决方法:
方法1:直接用原始DataFrame透视(最推荐)
完全没必要提前设置复合索引,直接基于原始的三列数据执行透视即可:
df_pivot = df.pivot(index='ts', values='count', columns='code')
方法2:将索引还原为列后透视
如果已经执行了复合索引的设置,可通过reset_index()将索引转回列,再执行透视:
df_count = df_count.reset_index() df_pivot = df_count.pivot(index='ts', values='count', columns='code')
方法3:利用复合索引的unstack方法
针对已设置复合索引的DataFrame,unstack可以直接将指定级别的索引转为列,实现类似透视的效果:
# 将code索引级别转为列,ts作为行索引 df_pivot = df_count.unstack(level='code')['count']
以上三种方法都能避免复制列的冗余操作,其中方法1是最直接高效的方案。
内容的提问来源于stack exchange,提问作者Capacytron
相关产品推荐
相关产品推荐

