如何在Pandas中横向拼接含重复索引的DataFrame?
Pandas合并两个DataFrame的实现方法
根据你需要的合并效果,以下是Pandas中几种常用的合并方式:
1. 纵向拼接(合并行)
当两个DataFrame的列结构完全一致,需要将行堆叠在一起时,使用pd.concat()并指定axis=0:
import pandas as pd # 示例数据 df1 = pd.DataFrame({'列1': [1, 2], '列2': [3, 4]}) df2 = pd.DataFrame({'列1': [5, 6], '列2': [7, 8]}) # 纵向合并,重置索引避免重复 merged_df = pd.concat([df1, df2], ignore_index=True)
2. 横向拼接(合并列)
按索引合并列
如果要基于索引将两个DataFrame的列拼接在一起,使用pd.concat()并指定axis=1:
df1 = pd.DataFrame({'列1': [1, 2], '列2': [3, 4]}, index=['行1', '行2']) df2 = pd.DataFrame({'列3': [5, 6], '列4': [7, 8]}, index=['行1', '行2']) merged_df = pd.concat([df1, df2], axis=1)
按指定字段关联合并(类SQL JOIN)
当需要基于某个共同字段关联两个DataFrame时,使用pd.merge(),支持内连接、左连接、右连接、外连接四种模式:
df1 = pd.DataFrame({'关联键': ['a', 'b', 'c'], '数据1': [1, 2, 3]}) df2 = pd.DataFrame({'关联键': ['b', 'c', 'd'], '数据2': [4, 5, 6]}) # 内连接(默认):仅保留双方都有的关联键记录 inner_merge = pd.merge(df1, df2, on='关联键') # 左连接:保留df1所有记录,匹配df2对应数据,无匹配则补NaN left_merge = pd.merge(df1, df2, on='关联键', how='left') # 右连接:保留df2所有记录,匹配df1对应数据,无匹配则补NaN right_merge = pd.merge(df1, df2, on='关联键', how='right') # 外连接:保留所有记录,无匹配则补NaN outer_merge = pd.merge(df1, df2, on='关联键', how='outer')
3. 按索引快速合并
如果习惯基于索引合并,也可以使用df.join()(默认左连接):
df1 = pd.DataFrame({'列1': [1, 2], '列2': [3, 4]}, index=['行1', '行2']) df2 = pd.DataFrame({'列3': [5, 6]}, index=['行1', '行2']) merged_df = df1.join(df2)
如果你的目标结果有特殊格式(比如特定列填充、多键关联等),可以根据实际场景调整上述方法的参数,比如指定suffixes处理重名列、用fillna填充缺失值等。
内容的提问来源于stack exchange,提问作者sepme
相关产品推荐
相关产品推荐

