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

Pandas如何基于两列去重并仅删除另一列为空的重复行

Pandas 实现需求最优方案

核心逻辑

通过向量化的分组统计+布尔索引实现,全程调用Pandas原生高性能接口,时间复杂度为O(n),适合各类数据量场景。

实现代码

1. 构造示例数据

import pandas as pd
import numpy as np

df = pd.DataFrame({
    "City": ["Chicago", "Sacramento", "Sacramento", "Naperville"],
    "Country": ["US", "US", "US", "US"],
    "State": ["IL", "CA", np.nan, "IL"]
})

2. 核心过滤逻辑

# 计算每行所属 City+Country 分组的总长度,判断是否为重复分组
group_size = df.groupby(["City", "Country"])["City"].transform("size")
# 定义要删除的行规则:属于重复分组 + State列为空
drop_mask = (group_size > 1) & df["State"].isna()
# 过滤得到结果
df_result = df[~drop_mask]

方案说明

  • 用transform返回和原数据等长的分组长度序列,避免分组后拼接的额外开销
  • 布尔索引过滤是Pandas性能最高的行筛选方式,比apply、循环遍历等方式快1~2个数量级
  • 逻辑清晰易读,可直接适配空值定义(比如State是空字符串的场景,只需要修改df["State"].isna()为对应判断逻辑即可)

运行后结果会自动删除索引为2的行,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:06:00