pandas宽格式DataFrame转长格式,pd.melt无法实现如何处理
实现方法
你可以直接拆分两组id对应的属性列后合并,逻辑更直观,代码如下:
import pandas as pd # 拆分id1对应的属性列,重命名为目标列名 df_id1 = df[["id1", "source_id1", "panel_id1"]].rename( columns={"id1": "id", "source_id1": "source", "panel_id1": "panel"} ) # 拆分id2对应的属性列,重命名为目标列名 df_id2 = df[["id2", "source_id2", "panel_id2"]].rename( columns={"id2": "id", "source_id2": "source", "panel_id2": "panel"} ) # 合并两个子表,删除id为空的无效行 result = pd.concat([df_id1, df_id2], ignore_index=True).dropna(subset=["id"]).reset_index(drop=True)
逻辑说明
原表的每一行并行存储了id1、id2两类id对应的source和panel属性,所以分别提取两类id的相关字段、对齐列名后合并,再过滤掉空id的无效行,就能得到你需要的长表结构,无需强制使用pd.melt实现。
内容的提问来源于stack exchange,提问作者Y.C.T
相关产品推荐
相关产品推荐

