Pandas 1.1.4 实现部分列转成行合并的简洁方案咨询
你可以直接用Pandas内置的pd.wide_to_long函数实现,一行代码就能完成转换,完全兼容你正在使用的1.1.4版本:
final_df = pd.wide_to_long(df.reset_index(), stubnames=['view', 'click'], i='Code', j='type', sep='_').set_index(['Code', 'type'])
如果不需要把Code和type设置为多级索引,只需要保留为普通列的话,代码还可以更简化:
final_df = pd.wide_to_long(df.reset_index(), stubnames=['view', 'click'], i='Code', j='type', sep='_')
简单说明
这个函数就是专门处理前缀_后缀格式列名的宽表转长表场景的:
stubnames填写列名的公共前缀,这里就是view和click,函数会自动匹配所有对应格式的列j参数指定提取出来的后缀要存在哪个列里,这里我们设为type,自动会取到A、B作为列值sep指定前缀和后缀之间的分隔符,这里就是下划线_- 因为你之前已经把
Code设为了索引,所以先用reset_index()把它变回普通列方便函数处理,处理完再用set_index改回你需要的多级索引格式即可
相比你现在手动拆分再合并的写法,这个方案扩展性更强,后续如果新增了view_C、click_C这类列,完全不需要修改逻辑,函数会自动处理。
内容的提问来源于stack exchange,提问作者haneulkim
相关产品推荐
相关产品推荐

