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

Pandas如何合并DataFrame中相同url的行并保留无url数据

Pandas 同URL行合并(保留空URL独立行)方案

问题描述

处理需求为合并DataFrame中url字段取值相同的行,原始数据共5列:url、col1、col2、col3、col4,样例数据如下:

  • url=aaa:第一行col2=xx、col3=yy,其余列空;第三行col1=ee,其余列空
  • url=bbb:第二行col1=zz,其余列空
  • url为空:第四行col4=AA,其余列空
    合并规则:
  • 非空URL的同值行合并,各列取非空值,最终aaa行结果为col1=ee、col2=xx、col3=yy、col4为空
  • 非空URL无重复的行(如bbb行)直接保留
  • 空URL行不参与合并,完整保留

已踩坑:直接使用groupby('url')会丢失空URL行;使用inner merge做自连接合并会出现行数异常倍增的问题。

实现逻辑

采用拆分-聚合-拼接的流程处理,从根源上避免上述两个问题:

  1. 将原始数据拆为两个独立子集:url非空子集、url为空子集
  2. 仅对url非空子集按url分组,聚合时每列取组内第一个非空值,完成同URL行合并
  3. 将聚合后的非空URL结果、原封不动的空URL子集做行拼接,重置索引得到最终结果

可运行代码

import pandas as pd
import numpy as np

# 构造样例原始数据
df = pd.DataFrame([
    {"url": "aaa", "col1": np.nan, "col2": "xx", "col3": "yy", "col4": np.nan},
    {"url": "bbb", "col1": "zz", "col2": np.nan, "col3": np.nan, "col4": np.nan},
    {"url": "aaa", "col1": "ee", "col2": np.nan, "col3": np.nan, "col4": np.nan},
    {"url": np.nan, "col1": np.nan, "col2": np.nan, "col3": np.nan, "col4": "AA"}
])

# 拆分数据集
non_empty_url_part = df[df["url"].notna()]
empty_url_part = df[df["url"].isna()]

# 同URL分组合并,取每列第一个非空值
merged_non_empty = non_empty_url_part.groupby("url", as_index=False).first()

# 拼接得到最终结果
final_df = pd.concat([merged_non_empty, empty_url_part], ignore_index=True)

效果说明

执行代码后得到的final_df完全匹配预期结果:

  • 两条url为aaa的行正确合并,所有非空字段无丢失
  • url为bbb的单行数据完整保留
  • 空URL、col4=AA的行未参与合并,原样保留
  • 无数据丢失、行数异常倍增问题

补充:如果同URL的同一列存在多个非空值,可按需调整聚合函数:需要取最后一个非空值将.first()替换为.last()即可;需要将多个非空值拼接为字符串可传入自定义聚合函数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:09:21