如何将两个Pandas DataFrame合并为含列名标识的目标结构?
合并Pandas DataFrame并生成指定结构的解决方案
嘿,这个需求咱们可以通过Pandas的堆叠(stack)和合并操作轻松实现,我给你一步步拆解清楚:
第一步:处理数值型DataFrame(df)
先把df的列转成行,同时保留原列名作为新的Name列,数值对应Cost列:
# 堆叠列到行,重置索引后调整列名 df_stacked = df.stack().reset_index() df_stacked.columns = ['行索引', 'Name', 'Cost'] # 删掉不需要的行索引列 df_stacked = df_stacked.drop('行索引', axis=1)
第二步:处理字符串型DataFrame(df2)
用同样的方式处理df2,提取出Serial列和对应的Name列:
df2_stacked = df2.stack().reset_index() df2_stacked.columns = ['行索引', 'Name', 'Serial'] df2_stacked = df2_stacked.drop('行索引', axis=1)
第三步:合并两个处理后的结果
因为两个堆叠后的DataFrame的Name列和行顺序完全匹配,直接拼接列就可以得到目标结构:
# 按列拼接,只保留需要的字段 df3 = pd.concat([df2_stacked['Serial'], df_stacked['Cost'], df_stacked['Name']], axis=1)
更简洁的一行式写法
如果想省点代码,也可以直接把两步堆叠和合并放在一起:
import pandas as pd df = pd.DataFrame({'A': [1,2,3,4], 'B': [5,6,7,8], 'C': [9,10,11,12]}) df2 = pd.DataFrame({'A': ['a','b','c','d'], 'B': ['e','f','g','h'], 'C': ['i','j','k','l']}) # 直接堆叠两个DataFrame,重组列名后筛选目标字段 df3 = pd.concat([df2.stack(), df.stack()], axis=1).reset_index() df3.columns = ['_', 'Name', 'Serial', 'Cost'] df3 = df3[['Serial', 'Cost', 'Name']].reset_index(drop=True)
运行上面的代码后,你就能得到完全符合需求的df3啦!
内容的提问来源于stack exchange,提问作者ben121
相关产品推荐
相关产品推荐

