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

如何按唯一ID合并重复行,用非空值填充空白列?

按ID合并行并填充非空值的解决方案

输入数据

ID      Salary Component 1    Value1      Salary Component 2       Value2
10000   Basic Salary          22000     
10000                                     Housing Allowance        13200

目标输出

ID      Salary Component 1    Value1      Salary Component 2       Value2
10000   Basic Salary          22000       Housing Allowance        13200

以下是几种常用工具的实现方案:

Excel(Power Query)方案

  1. 选中数据区域,点击数据选项卡 → 从表格/区域(勾选"我的表格有标题"),进入Power Query编辑器
  2. 选中ID列,点击转换选项卡 → 分组依据
  3. 在分组设置窗口:
    • 分组依据:ID
    • 新增列名:合并数据,操作选择所有行
  4. 添加自定义列,公式输入:Table.FillDown(Table.FillUp([合并数据], Table.ColumnNames([合并数据])), Table.ColumnNames([合并数据]))
  5. 展开自定义列的所有字段,删除多余的合并数据列
  6. 点击关闭并上载,即可得到目标结果

Python Pandas方案

通过groupby结合自定义聚合函数,提取每个ID下各列的首个非空值:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    "ID": [10000, 10000],
    "Salary Component 1": ["Basic Salary", None],
    "Value1": [22000, None],
    "Salary Component 2": [None, "Housing Allowance"],
    "Value2": [None, 13200]
})

# 按ID分组并聚合非空值
result = df.groupby("ID").agg(lambda x: x.dropna().iloc[0] if not x.dropna().empty else None).reset_index()

print(result)

SQL方案

利用GROUP BY结合MAX()函数(MAX会自动忽略NULL值,适配文本和数值类型):

SELECT 
    ID,
    MAX(`Salary Component 1`) AS `Salary Component 1`,
    MAX(Value1) AS Value1,
    MAX(`Salary Component 2`) AS `Salary Component 2`,
    MAX(Value2) AS Value2
FROM your_table
GROUP BY ID;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:17:12