如何在Python Pandas中基于相同ID列合并3个Series为DataFrame
解决方案
假设你的三个Series分别命名为s1、s2、s3,每个Series的索引为人员姓名(Name),值对应不同时间的指标(比如s1对应2020-01,s2对应2020-02,s3对应2020-03),以下是两种可行的合并方法:
方法1:用pd.concat按列合并(高效简洁)
直接指定按列合并方向,给每个Series命名对应时间列,最后将索引转为Name列:
import pandas as pd # 给每个Series设置对应时间的列名 s1 = s1.rename('2020-01') s2 = s2.rename('2020-02') s3 = s3.rename('2020-03') # 按列合并后重置索引,把原索引(Name)转为列 result_df = pd.concat([s1, s2, s3], axis=1).reset_index().rename(columns={'index': 'Name'})
方法2:用merge逐步合并(灵活处理缺失值)
如果需要精准控制合并逻辑(比如只保留共同存在的姓名),可以逐个合并:
import pandas as pd # 将每个Series转为带Name列的DataFrame df1 = s1.reset_index().rename(columns={'index': 'Name', 0: '2020-01'}) df2 = s2.reset_index().rename(columns={'index': 'Name', 0: '2020-02'}) df3 = s3.reset_index().rename(columns={'index': 'Name', 0: '2020-03'}) # 按Name列合并,how='outer'保留所有姓名,改'inner'则只保留三者共有的姓名 result_df = df1.merge(df2, on='Name', how='outer').merge(df3, on='Name', how='outer')
失败原因说明
你之前用concat未成功,大概率是没指定axis=1(默认axis=0是按行堆叠),或者没给Series设置明确列名,导致合并后结构不符合预期。
内容的提问来源于stack exchange,提问作者Kristy
相关产品推荐
相关产品推荐

