如何将pandas groupby unstack生成的透视宽表还原为原始长表结构
解决方法
你遇到的报错是因为melt方法默认只会从普通列中查找id_vars指定的字段,而你的store_id和item_id属于多级索引,不在普通列范围内。有两种常用方案可以实现需求:
方案1:先重置索引再使用melt
先调用reset_index()将多级索引转为普通列,再执行你原本的melt逻辑即可:
long_df = df.reset_index().melt( id_vars=["store_id", "item_id"], var_name="week", value_name="sales" )
这种方法兼容性强,适用所有带多级索引的宽表转长表场景。
方案2:直接用stack逆操作还原
因为你之前是通过unstack得到的宽表,直接用它的逆操作stack就能快速还原长表,代码更简洁、执行效率更高:
long_df = df.stack().reset_index(name="sales")
执行后reset_index会自动把多级索引(store_id、item_id、week)转为普通列,同时指定堆叠后的销量列名为sales。
内容的提问来源于stack exchange,提问作者Manish Tripathi
相关产品推荐
相关产品推荐

