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

相关推荐
Li emily1 小时前
如何通过外汇API平台快速实现实时数据接入?
开发语言·python·api·fastapi·美股
m0_561359671 小时前
掌握Python魔法方法(Magic Methods)
jvm·数据库·python
Ulyanov1 小时前
顶层设计——单脉冲雷达仿真器的灵魂蓝图
python·算法·pyside·仿真系统·单脉冲
2401_838472512 小时前
使用Python进行图像识别:CNN卷积神经网络实战
jvm·数据库·python
CoLiuRs2 小时前
语义搜索系统原理与实现
redis·python·向量·es
zhihuaba2 小时前
使用PyTorch构建你的第一个神经网络
jvm·数据库·python
u0109272712 小时前
Python Web爬虫入门:使用Requests和BeautifulSoup
jvm·数据库·python
Stream_Silver3 小时前
【Agent学习笔记3:使用Python开发简单MCP服务】
笔记·python
穿过锁扣的风3 小时前
零基础入门 Python 爬虫:从基础到实战,爬取虎扑 / 豆瓣 / 图片全掌握
开发语言·爬虫·python
Stream_Silver3 小时前
【Agent学习笔记2:深入理解Function Calling技术:从原理到实践】
笔记·python