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

Pandas按ip分组聚合type列时如何固定拼接顺序符合指定格式

Pandas分组按固定顺序拼接字段实现方案

问题说明

需要对如下结构的DataFrame按ip分组,将去重后的type值用斜杠拼接,且拼接顺序必须严格遵循Missing在前、Type 1居中、Type 2在后的规则,最终输出仅允许7种合法取值,不能出现Type 1/Missing、Type 2/Type 1这类顺序错误的结果。

输入数据

year ip   type
2020 101  Missing
2021 101  Type 1
2022 101  Type 2
2020 102  Missing
2021 102  Missing
2020 103  Missing
2021 103  Type 2
2021 104  Type 1
2022 104  Type 2
2022 104  Type 2

预期输出

ip  type
101 Missing/Type 1/Type 2
102 Missing
103 Missing/Type 2
104 Type 1/Type 2

原有实现直接对去重结果拼接,会保留数据原始出现顺序,无法保证固定排序规则,容易生成顺序错误的结果。

正确实现代码

核心逻辑是先给type字段绑定固定排序权重,分组内先按权重排序再去重拼接,从根源保证拼接顺序符合要求。

import pandas as pd

# 定义type值的排序优先级,数值越小拼接时位置越靠前
type_order = {
    "Missing": 0,
    "Type 1": 1,
    "Type 2": 2
}

# 给每条数据添加排序权重列
df["type_rank"] = df["type"].map(type_order)

result = (
    df
    # 先按ip分组、同ip下按type优先级排序
    .sort_values(by=["ip", "type_rank"])
    # 去除同ip下重复的type值
    .drop_duplicates(subset=["ip", "type"])
    # 按ip分组拼接type字段
    .groupby("ip", as_index=False)["type"]
    .agg("/".join)
)

效果说明

运行上述代码后得到的结果完全匹配预期,无论原始数据中同ip下的type值出现顺序如何混乱,最终拼接结果都会严格遵守指定顺序,输出只会是要求的7种合法值,不会出现顺序颠倒的异常情况。如果后续需要新增其他type取值,只需要在type_order字典中按想要的排序位置补充对应的权重值即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 06:54:26