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

如何对可互换的两列组合分组并求和Total列?

解决方案

不管你用的是PySpark还是Pandas,核心思路都是给双向组合生成统一的分组标识,让X→Y和Y→X拥有相同的分组键,再基于这个键求和。以下是两种主流框架的实现:

针对PySpark DataFrame

from pyspark.sql import functions as F

# 1. 生成排序后的分组键:将Start和End组成数组并排序,确保双向组合键一致
df_with_key = df.withColumn("group_key", F.array_sort(F.array("Start", "End")))

# 2. 按统一键分组,对Total求和
summed_df = df_with_key.groupBy("group_key").agg(F.sum("Total").alias("Total"))

# 3. 拆分分组键为Start和End列,整理最终结果
result_df = summed_df.select(
    F.col("group_key")[0].alias("Start"),
    F.col("group_key")[1].alias("End"),
    "Total"
)

# 查看结果
result_df.show()

针对Pandas DataFrame

import pandas as pd

# 1. 生成排序后的元组作为分组键
df["group_key"] = df.apply(lambda row: tuple(sorted([row["Start"], row["End"]])), axis=1)

# 2. 按分组键求和,重置索引
summed_df = df.groupby("group_key")["Total"].sum().reset_index()

# 3. 拆分分组键为Start和End列,整理列顺序
summed_df[["Start", "End"]] = pd.DataFrame(summed_df["group_key"].tolist(), index=summed_df.index)
result_df = summed_df[["Start", "End", "Total"]]

# 查看结果
print(result_df)

原理说明

通过array_sort(PySpark)或sorted(Pandas)对Start和End的组合进行排序,使得任意双向组合(如X-Y和Y-X)生成完全相同的分组键,这样分组求和时就能自动合并双向数据,最后再将分组键拆回原列格式即可得到预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:10:48