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

如何按指定格式合并多个DataFrame?求简便实现方案

简单解决DataFrame合并问题:按行填充缺失type值

看起来你想实现的是按行对齐三个DataFrame,保留每个行里唯一非空的type值,其实不用复杂的分组操作,利用pandas的combine_first方法就能轻松搞定,思路如下:

核心逻辑

因为你的三个DataFrame行索引完全对齐(都是5行,name_a/name_b/name_c列内容也一致),combine_first会自动按索引和列名匹配,用右侧DataFrame的非空值填充左侧DataFrame的缺失值。我们只需要按你期望的优先级调整顺序即可:

  • 优先保留DataFrame 1的type值
  • 当DataFrame 1的type为空时,用DataFrame 3的type填充
  • 最后用DataFrame 2的type填充剩余的空值

代码实现

先模拟你的三个DataFrame:

import pandas as pd

# 构造DataFrame 1
df1 = pd.DataFrame({
    'name_a': ['a']*5,
    'name_b': ['b']*5,
    'name_c': ['c']*5,
    'type': ['type_a', None, None, 'type_a', None]
})

# 构造DataFrame 2
df2 = pd.DataFrame({
    'name_a': ['a']*5,
    'name_b': ['b']*5,
    'name_c': ['c']*5,
    'type': [None, None, 'type_b', None, None]
})

# 构造DataFrame 3
df3 = pd.DataFrame({
    'name_a': ['a']*5,
    'name_b': ['b']*5,
    'name_c': ['c']*5,
    'type': [None, 'type_c', None, None, None]
})

然后执行合并:

# 按优先级合并
result = df1.combine_first(df3).combine_first(df2)
# 可选:将type列的nan转为空值,和你的期望格式完全匹配
result['type'] = result['type'].where(pd.notnull(result['type']), None)

查看结果:

name_a name_b name_c    type
0      a      b      c  type_a
1      a      b      c  type_c
2      a      b      c  type_b
3      a      b      c  type_a
4      a      b      c    None

完全符合你期望的输出格式!

为什么这个方法比分组更简单?

你之前尝试的concat+分组思路是针对行堆叠后去重的场景,但这里的三个DataFrame是行一一对应的,不是堆叠关系,所以直接利用索引对齐的填充方法更高效,代码也更简洁。

内容的提问来源于stack exchange,提问作者Aeria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:02:53