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

如何用Pandas高效计算数据集所有点组合的求和(大数据量场景)

解决方案

针对大规模数据集,我们可以通过向量化操作+组合生成的方式高效计算所有点两两组合的ct求和值,核心思路是先为每行生成所有有效点对,再对相同点对的ct值进行聚合求和。

步骤说明

  1. 提取所有存储点的列(排除ct列);
  2. 对每行的点生成无序两两组合(通过排序点对避免重复统计(p1,p2)和(p2,p1));
  3. 将每行的ct值关联到对应的所有点对;
  4. 按点对分组,对ct值求和得到最终结果。

代码实现

import pandas as pd
from itertools import combinations

# 示例数据(替换为你的实际数据集)
data = {
    'Col1': ['Id1', 'Id8'],
    'col2': ['id2', 'id3'],
    'col3': ['id3', 'id5'],
    'col4': ['id4', 'id2'],
    'col5': ['id5', 'id4'],
    'col6': ['id6', 'id6'],
    'ct': [30, 45]
}
df = pd.DataFrame(data)

# 获取所有点列的名称
point_columns = df.columns.drop('ct')

# 定义函数:生成每行的点对并关联ct
def generate_pairs(row):
    points = row[point_columns].tolist()
    # 生成两两组合并排序,确保无序对唯一
    sorted_pairs = [tuple(sorted(pair)) for pair in combinations(points, 2)]
    return pd.DataFrame(sorted_pairs, columns=['p1', 'p2']).assign(ct=row['ct'])

# 生成所有点对数据并合并
all_pairs = df.apply(generate_pairs, axis=1).concat()

# 按点对分组求和
final_result = all_pairs.groupby(['p1', 'p2'], as_index=False)['ct'].sum()

print(final_result)

效率说明

  • itertools.combinations是C语言实现的高效组合生成工具,能快速生成每行的C(n,2)个点对(n为每行的点数,此处n=6);
  • Pandas的concat和groupby均为向量化操作,避免了Python循环的开销,适合处理大规模数据集;
  • 通过排序点对确保无序对的唯一性,避免了重复聚合的冗余计算。

执行上述代码后,输出结果与预期一致:

p1    p2  ct
0  Id2  id4  75
1  Id2  id6  75
2  Id3  id4  75
3  Id3  id5  75
4  Id3  id6  75
5  Id4  id6  75
6  Id5  id6  75

内容的提问来源于stack exchange,提问作者Илья Бобров

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:17:51