groupby.agg去重后的展平列表通用方法flatten_unique


通用方法写法

python 复制代码
import pandas as pd
from collections.abc import Iterable

def flatten_unique(series):
    """
    将Series中的元素(可能是列表或单值)展平、去重,返回列表。
    
    参数:
        series: pandas.Series
    返回:
        list 去重后的展平列表
    """
    # 展平
    flat_list = []
    for v in series:
        if isinstance(v, Iterable) and not isinstance(v, (str, bytes)):
            flat_list.extend(v)   # 如果是列表或其他可迭代
        else:
            flat_list.append(v)   # 如果是单个值
    # 去重并去掉 None
    return list(pd.unique([i for i in flat_list if pd.notna(i)]))

使用示例

ini 复制代码
df_result = (
    df_kong_sorted.groupby(["modelCode", "originalModel"], as_index=False)
    .agg(
        first_year=("year", "first"),
        first_week=("week", "first"),
        last_year=("year", "last"),
        last_week=("week", "last"),
        sum_amount=("total", "sum"),
        sum_volume=("count", "sum"),
        record_mark=("recordMark", flatten_unique)
    )
)

如果你需要返回字符串而不是列表

可以再写一个包装函数:

python 复制代码
def flatten_unique_str(series, sep=","):
    return sep.join(map(str, flatten_unique(series)))

这样可以直接:

ini 复制代码
record_mark=("recordMark", lambda x: flatten_unique_str(x, sep=";"))

这个方法的好处:

  • 通用:任何 DataFrame 分组聚合都能用
  • 类型兼容recordMark 里既有 list 又有单个字符串都能处理
  • 自动去重:避免重复值
  • 可扩展 :需要拼接成字符串时直接调用 flatten_unique_str

相关推荐
新子y16 分钟前
【小白笔记】岛屿数量
笔记·python
CLubiy21 分钟前
【研究生随笔】Pytorch中的线性代数
pytorch·python·深度学习·线性代数·机器学习
reasonsummer23 分钟前
【办公类-115-02】20251018信息员每周通讯上传之文字稿整理(PDF转docx没有成功)
python·pdf
材料科学研究30 分钟前
深度学习物理神经网络(PINN)!
python·深度学习·神经网络·pinn
兰文彬36 分钟前
Pytorch环境安装指南与建议
人工智能·pytorch·python
哦你看看1 小时前
学习Python 03
开发语言·windows·python
后端小张1 小时前
[AI 学习日记] 深入解析MCP —— 从基础配置到高级应用指南
人工智能·python·ai·开源协议·mcp·智能化转型·通用协议
天青色等烟雨..1 小时前
AI+Python驱动的无人机生态三维建模与碳储/生物量/LULC估算全流程实战技术
人工智能·python·无人机
新子y1 小时前
【小白笔记】岛屿的周长(Island Perimeter)
笔记·python
闲人编程2 小时前
深入浅出Transformer:使用Hugging Face库快速上手NLP
python·深度学习·自然语言处理·nlp·transformer·hugging face·codecapsule