如何仅基于共享列名合并两个或多个DataFrame?
仅基于共享列名合并多个DataFrame的解决方案
核心思路是:先提取所有DataFrame的共享列名,再分别从每个DataFrame中取出这些列,最后将提取后的结果按行合并。以下分Python(Pandas)和R两种常用场景说明:
Python (Pandas) 实现
代码示例
import pandas as pd # 构造示例数据 df1 = pd.DataFrame({ "car": ["Toyota", "Honda"], "power": [150, 130], "age": [5, 3] }) df2 = pd.DataFrame({ "car": ["Ford", "BMW"], "power": [200, 250], "distance": [10000, 8000] }) # 1. 获取两个DataFrame的共享列名 shared_cols = df1.columns.intersection(df2.columns) # 2. 提取共享列并按行合并 merged_df = pd.concat([df1[shared_cols], df2[shared_cols]], ignore_index=True)
执行后merged_df仅包含car和power列,且包含两个原DataFrame的对应行数据。
为什么之前的方法失败?
merge():默认是按列做关联匹配(类似数据库JOIN),不是行堆叠,不符合你的需求;- 你提到的
rbind()是R语言的方法,并非Pandas语法; - 若误将
concat设置为列合并(axis=1),也会得到错误结果。
R 实现
代码示例
# 构造示例数据 df1 <- data.frame( car = c("Toyota", "Honda"), power = c(150, 130), age = c(5, 3) ) df2 <- data.frame( car = c("Ford", "BMW"), power = c(200, 250), distance = c(10000, 8000) ) # 1. 获取两个DataFrame的共享列名 shared_cols <- intersect(names(df1), names(df2)) # 2. 提取共享列并按行合并 merged_df <- rbind(df1[shared_cols], df2[shared_cols])
执行后merged_df仅保留car和power列,包含两个原数据框的行。
为什么之前的方法失败?
rbind()直接使用会报错,因为原数据框列名/列数不一致,必须先提取共享列;inner_join/outer_join是按指定键做关联合并,不是简单的行堆叠,不符合需求。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

