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

基于部门合并Account details与Account specifics并去重的Pandas实现问题

解决按部门合并Account数据并去重流程的问题

我懂你要搞定的事儿——把Account details和Account specifics的数据按部门维度整合,去掉同一部门里重复的流程,最后还要把所有行的Name统一成Account details对吧?之前用pd.groupby没成功,我给你分享两个靠谱的解决思路:

方法一:先去重再统一名称(最简单直接)

这个方法逻辑清晰:先把同一部门下重复的流程去掉,再把Name列统一替换成目标值,最后调整顺序匹配你的期望输出。

完整代码

import pandas as pd

# 原始数据
df = pd.DataFrame({
    "Name": ["Account details", "Account details", "Account details", "Account specifics", "Account specifics", "Account specifics"],
    "Department": ["HR", "HR", "Finance", "HR", "Finance", "Retail"],
    "Process": ["Process1", "Process2", "Process1", "Process2", "Process2", "Process1"]
})

# 1. 按部门和流程去重,保留第一个出现的记录
df_unique = df.drop_duplicates(subset=["Department", "Process"], keep="first")
# 2. 统一Name列为"Account details"
df_unique["Name"] = "Account details"
# 3. 按你期望的部门顺序排序(HR → Finance → Retail)
custom_order = ["HR", "Finance", "Retail"]
df_final = df_unique.set_index("Department").loc[custom_order].reset_index(drop=False)

print(df_final)

输出结果

Name Department   Process
0  Account details         HR  Process1
1  Account details         HR  Process2
2  Account details    Finance  Process1
3  Account details    Finance  Process2
4  Account details      Retail  Process1

完全匹配你要的期望输出!

方法二:用groupby实现(解决你之前的困惑)

如果你一定要用groupby来做,核心是分组后收集每个部门的所有流程并去重,再把列表拆分成单独的行。之前没成功可能是没处理好去重和行展开这两步:

完整代码

import pandas as pd

# 原始数据同上
df = pd.DataFrame({
    "Name": ["Account details", "Account details", "Account details", "Account specifics", "Account specifics", "Account specifics"],
    "Department": ["HR", "HR", "Finance", "HR", "Finance", "Retail"],
    "Process": ["Process1", "Process2", "Process1", "Process2", "Process2", "Process1"]
})

# 按部门分组,收集该部门所有不重复的流程
grouped = df.groupby("Department")["Process"].apply(lambda x: list(pd.unique(x))).reset_index()
# 把每个部门的流程列表拆分成单独的行
df_expanded = grouped.explode("Process")
# 添加统一的Name列
df_expanded["Name"] = "Account details"
# 调整列顺序和自定义排序
df_expanded = df_expanded[["Name", "Department", "Process"]]
custom_order = ["HR", "Finance", "Retail"]
df_final = df_expanded.set_index("Department").loc[custom_order].reset_index(drop=False)

print(df_final)

这个方法也能得到和上面一样的结果,适合你想深入用groupby逻辑的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:49:04