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

相关推荐
一枚小小程序员哈29 分钟前
基于python/django框架的车型识别系统
开发语言·python
计算机毕业设计木哥30 分钟前
基于大数据spark的医用消耗选品采集数据可视化分析系统【Hadoop、spark、python】
大数据·hadoop·python·信息可视化·spark·课程设计
坫鹏加油站1 小时前
【Python】支持向量机SVM
python·算法·机器学习·支持向量机
炒茄子1 小时前
Python:如何处理WRF投影(LCC, 兰伯特投影)?
python
傻啦嘿哟2 小时前
Python3解释器深度解析与实战教程:从源码到性能优化的全路径探索
开发语言·python
修仙的人3 小时前
【开发环境】 VSCode 快速搭建 Python 项目开发环境
前端·后端·python
hhhh明3 小时前
Windows11 运行IsaacSim GPU Vulkan崩溃
vscode·python
在钱塘江3 小时前
LangGraph构建Ai智能体-12-高级RAG之自适应RAG
人工智能·python
站大爷IP3 小时前
Python列表基础操作全解析:从创建到灵活应用
python