You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅基于共享列名合并两个或多个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 10:17:34