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

如何将DataFrame分组后指定列的数据聚合转换为元组格式

实现方法

以下提供两种常用数据处理环境下的实现方案:


Pandas 实现

直接通过groupby+多列聚合即可实现需求:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'Id': [1,1,1,1,2],
    'fomrid': ['x1','x1','x1','x2','p1'],
    'values': [22.0, 'test', 11, 21, 1],
    'occ': [1,2,3,0,1],
    'comments': ['text1','text2','text3','text4','text5']
})

# 分组聚合
result = df.groupby(['Id', 'fomrid'], as_index=False).agg(
    **{
        'tuple(values)': ('values', tuple),
        'tuple(occ)': ('occ', tuple),
        'comments': ('comments', 'first')
    }
)

print(result)

PySpark 实现

Spark原生collect_list返回数组格式,额外加一个简单UDF转换为元组即可:

from pyspark.sql import SparkSession
from pyspark.sql.functions import collect_list, first, udf

# 初始化Spark会话
spark = SparkSession.builder.appName("group_to_tuple").getOrCreate()

# 构造示例DataFrame
data = [
    (1, "x1", 22.0, 1, "text1"),
    (1, "x1", "test", 2, "text2"),
    (1, "x1", 11, 3, "text3"),
    (1, "x2", 21, 0, "text4"),
    (2, "p1", 1, 1, "text5")
]
df = spark.createDataFrame(data, schema=["Id", "fomrid", "values", "occ", "comments"])

# 定义列表转元组的UDF
to_tuple = udf(lambda x: tuple(x))

# 分组聚合
result = df.groupBy("Id", "fomrid").agg(
    to_tuple(collect_list("values")).alias("tuple(values)"),
    to_tuple(collect_list("occ")).alias("tuple(occ)"),
    first("comments").alias("comments")
)

result.show()

内容的提问来源于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 23:57:04