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

相关推荐
u***32433 小时前
使用python进行PostgreSQL 数据库连接
数据库·python·postgresql
青瓷程序设计5 小时前
动物识别系统【最新版】Python+TensorFlow+Vue3+Django+人工智能+深度学习+卷积神经网络算法
人工智能·python·深度学习
tobebetter95275 小时前
How to manage python versions on windows
开发语言·windows·python
F_D_Z6 小时前
数据集相关类代码回顾理解 | sns.distplot\%matplotlib inline\sns.scatterplot
python·深度学习·matplotlib
daidaidaiyu6 小时前
一文入门 LangGraph 开发
python·ai
不知更鸟8 小时前
前端报错:快速解决Django接口404问题
前端·python·django
4***72138 小时前
【玩转全栈】----Django模板语法、请求与响应
数据库·python·django
梁正雄8 小时前
1、python基础语法
开发语言·python
ituff9 小时前
微软认证考试又免费了
后端·python·flask
梁正雄10 小时前
2、Python流程控制
开发语言·python