如何按唯一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)方案
- 选中数据区域,点击数据选项卡 → 从表格/区域(勾选"我的表格有标题"),进入Power Query编辑器
- 选中
ID列,点击转换选项卡 → 分组依据 - 在分组设置窗口:
- 分组依据:
ID - 新增列名:
合并数据,操作选择所有行
- 分组依据:
- 添加自定义列,公式输入:
Table.FillDown(Table.FillUp([合并数据], Table.ColumnNames([合并数据])), Table.ColumnNames([合并数据])) - 展开自定义列的所有字段,删除多余的
合并数据列 - 点击关闭并上载,即可得到目标结果
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
相关产品推荐
相关产品推荐

