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

如何基于指定列对Pandas DataFrame按Name列分组去重?

Pandas分组去重实现指引

核心思路

按Name列分组后,提取每组内各列的唯一非空有效值——你的原始数据中,同一Name分组下的有效数据分散在不同行,其余行对应列均为空,只需取每组各列第一个非空值(或唯一非空值)即可得到目标结果。

代码实现

假设你的DataFrame变量名为df,以下是两种可行方案:

方案1:简洁高效(推荐)

利用groupby结合first()方法,自动跳过空值(需先将空字符串转为NaN):

import pandas as pd

# 先将原始数据中的空字符串替换为Pandas可识别的NaN
df = df.replace('', pd.NA)

# 按Name分组,取每组各列第一个非空有效值
result = df.groupby('Name', as_index=False).first()

方案2:精准控制(适用于复杂场景)

如果需要明确指定每列的处理逻辑(比如确保只取唯一非空值),可以用agg自定义聚合函数:

import pandas as pd

df = df.replace('', pd.NA)

result = df.groupby('Name', as_index=False).agg(
    NoOfTrans=('NoOfTrans', lambda x: x.dropna().unique()[0] if not x.dropna().empty else pd.NA),
    Avg_pass_time=('Avg_pass_time', lambda x: x.dropna().unique()[0] if not x.dropna().empty else pd.NA),
    Cons.Error=('Cons.Error', lambda x: x.dropna().unique()[0] if not x.dropna().empty else pd.NA),
    RunCounts=('RunCounts', lambda x: x.dropna().unique()[0] if not x.dropna().empty else pd.NA)
)

结果验证

执行上述代码后,result的输出将完全符合你的需求:

Name    NoOfTrans   Avg_pass_time    Cons.Error            RunCounts
Jan     0                            Failed:abcd           4
May     2           1200             Failed:abcFailed:cde  5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:45:42