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

Pandas按单键合并DataFrame,指定列仅首次保留非空值

解决Pandas合并后Status列重复值问题

步骤1:执行初始合并

先运行你原本的合并代码,得到包含重复status值的DataFrame:

import pandas as pd

# 构造示例数据
DF1 = pd.DataFrame({
    'employee': ['x12345', 'x12345', 'z12345', 'z12345'],
    'year': [2023, 2022, 2015, 2013]
})

DF2 = pd.DataFrame({
    'employee': ['x12345', 'z12345', 'm12345', 'q12345'],
    'status': ['active', 'active', 'inactive', 'active']
})

# 初始合并操作
merged = pd.merge(DF1, DF2, how="outer", on=["employee"])

步骤2:处理重复的Status值

通过分组标记的方式,仅保留每个employee组内第一条记录的status值,其余替换为Pandas的缺失值(对应你要的NULL):

# 标记每个employee的第一条记录
merged['is_first'] = merged.groupby('employee').cumcount() == 0
# 仅保留第一条的status,其余设为缺失值
merged['status'] = merged['status'].where(merged['is_first'], pd.NA)
# 删除临时标记列
merged = merged.drop('is_first', axis=1)

或者用更简洁的transform写法:

merged['status'] = merged.groupby('employee')['status'].transform(
    lambda x: x.where(x.index == x.first_valid_index(), pd.NA)
)

最终效果

处理后的数据框会匹配你的期望:

employeeyearstatus
x123452023active
x123452022
z123452015active
z123452013
m12345NaNinactive
q12345NaNactive

注:Pandas中用pd.NA表示缺失值,显示时会呈现为<NA>,和你需要的NULL效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:42:19