Pandas链路DataFrame转换:函数使用与实现逻辑咨询
Pandas宽表转长表实现建议
第一步:生成过渡长表df2
你之前的代码问题出在Key列仅拼接了一次原始Key,而X、Y各有2对后缀列,相当于每一行原始数据要对应2行新数据,Key需要重复对应次数,所以长度不匹配。推荐两种实现方式:
- 优先用
pd.wide_to_long():这是处理带数字后缀成对宽列的专用函数,设置stubnames=['X', 'Y']、i='Key'、j='level'参数,运行后直接就能得到带Key、X、Y的长表,只需额外删除不需要的level列即可,代码简洁且不会出现行列匹配错误。 - 也可以用
pd.concat()手动拼接:遍历所有Xn/Yn的数字后缀,每轮提取对应Key、Xn、Yn列重命名为统一的X、Y,生成单级链路小表,最后把所有小表concat合并,逻辑直观易调试。
提示:不要再使用已废弃的
append方法,Pandas 2.0+版本已经完全移除该API,所有拼接操作统一用pd.concat实现。
第二步:聚合得到最终表
- 对df2按
X、Y两列做groupby分组 - 对Key列使用
list作为聚合函数,即可得到关联该链路的所有Key列表;如果需要单元素时直接存储字符串而非列表,可以额外加个判断转换。
内容的提问来源于stack exchange,提问作者Lemisourd
相关产品推荐
相关产品推荐

