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

如何根据匹配字段formId将dataframe的指定列聚合为数组

DataFrame分组聚合实现方案

以下分别提供Pandas和PySpark两种常用环境的实现代码:

Pandas 环境

核心逻辑是按Id、fomrid作为分组键,分别将values、occ字段聚合为列表,comments取分组内首行值:

import pandas as pd

result_df = df.groupby(['Id', 'fomrid'], as_index=False).agg(
    List_values=('values', list),
    List_occ=('occ', list),
    comments=('comments', 'first')
)

PySpark 环境

使用Spark内置的collect_list函数实现列表聚合,如需保持列表和原数据行顺序一致,可搭配排序逻辑使用:

基础版(不强制顺序)

from pyspark.sql import functions as F

result_df = df.groupBy("Id", "fomrid").agg(
    F.collect_list("values").alias("List_values"),
    F.collect_list("occ").alias("List_occ"),
    F.first("comments").alias("comments")
)

保持原行顺序版

from pyspark.sql import functions as F

result_df = df.withColumn("sort_struct", F.struct("occ", "values")) \
              .groupBy("Id", "fomrid") \
              .agg(
                  F.sort_array(F.collect_list("sort_struct")).alias("sorted_data"),
                  F.first("comments").alias("comments")
              ) \
              .select(
                  "Id", "fomrid",
                  F.expr("transform(sorted_data, item -> item.values)").alias("List_values"),
                  F.expr("transform(sorted_data, item -> item.occ)").alias("List_occ"),
                  "comments"
              )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:09:01