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

Pandas合并DataFrame:如何保留固定列结构(含缺失列)

Pandas 固定列填充:用列数不固定的DataFrame填充目标DataFrame

解决方案

你可以通过两种简洁的方式实现需求,核心是对齐group列并保留目标DataFrame的固定列结构:

方法1:使用merge + 列覆盖

先按group列左合并两个DataFrame,确保保留目标DataFrame的所有行和列,再用数据DataFrame的对应列值覆盖目标列:

import pandas as pd

# 构造目标DataFrame(固定列结构)
target_df = pd.DataFrame({
    'group': ['A', 'B', 'C'],
    'USD': [None]*3,
    'EUR': [None]*3,
    'GBP': [None]*3
})

# 构造示例数据DataFrame(列数不固定,此处无GBP列)
data_df = pd.DataFrame({
    'group': ['A', 'B', 'C'],
    'USD': [None, 0.04, 0.02],
    'EUR': [0.05, None, None]
})

# 左合并,保留target_df的所有列,合并后重复列加后缀区分
merged = target_df.merge(data_df, on='group', how='left', suffixes=('_orig', ''))

# 遍历币种列,用合并后的新值覆盖原列
for col in ['USD', 'EUR', 'GBP']:
    if col in merged.columns:
        target_df[col] = merged[col]

print(target_df)

输出结果:

group   USD   EUR  GBP
0     A   NaN  0.05  NaN
1     B  0.04   NaN  NaN
2     C  0.02   NaN  NaN

方法2:使用set_index + combine_first

将group设为索引实现对齐,利用combine_first直接用数据DataFrame的非空值填充目标DataFrame,自动保留目标列结构:

import pandas as pd

# 构造目标和数据DataFrame(同上)
target_df = pd.DataFrame({
    'group': ['A', 'B', 'C'],
    'USD': [None]*3,
    'EUR': [None]*3,
    'GBP': [None]*3
})

data_df = pd.DataFrame({
    'group': ['A', 'B', 'C'],
    'USD': [None, 0.04, 0.02],
    'EUR': [0.05, None, None]
})

# 将group设为索引,实现按组对齐
target_idx = target_df.set_index('group')
data_idx = data_df.set_index('group')

# 用数据DF填充目标DF,保留目标DF的所有列
result = data_idx.combine_first(target_idx).reset_index()

print(result)

输出结果和方法1完全一致,此方法更简洁,适合group列唯一的场景。

关键说明

  • 两种方法都会自动保留USD、EUR、GBP三列,即使数据DataFrame缺少某列,对应列会保留缺失值(NaN)。
  • Pandas中None会自动转换为标准缺失值NaN,这是正常的内部处理逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:37:41