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

Python中基于元素列表计算DataFrame连续元素对的求和问题

问题与解决方案

现有数据

Pandas DataFrame

import pandas as pd
data = {'Name1':['A', 'B', 'C', 'D','E','F','G','H'],
        'Name2':['B','C','D','E','F','G','H','D'],
        'sum':[12,10,5,5, 10,15,10,13]
       }
df = pd.DataFrame(data)

需要计算的元素列表

my_list=[['A','B'],['F','G'],['A','B','C'],['A','B','C','D','E'],['E','F','G']]

计算规则

每个子列表的求和逻辑:

  • 长度为2的子列表,直接取DataFrame中对应Name1与Name2配对的sum值
  • 长度大于2的子列表,依次累加连续两两配对的sum值,例如:
    • ['A','B','C'] = ['A','B']的sum + ['B','C']的sum = 12+10=22
    • ['A','B','C','D','E'] = ['A','B']+['B','C']+['C','D']+['D','E']的sum总和=12+10+5+5=32

实现代码

# 构建配对到sum值的映射字典,提升查找效率
pair_sum = df.set_index(['Name1', 'Name2'])['sum'].to_dict()

# 定义计算单个列表总和的函数
def calculate_total(lst):
    total = 0
    # 遍历列表中连续的两两配对
    for i in range(len(lst)-1):
        pair = (lst[i], lst[i+1])
        total += pair_sum.get(pair, 0)  # 若配对不存在默认加0,可按需调整
    return total

# 批量计算所有子列表的结果
results = {tuple(lst): calculate_total(lst) for lst in my_list}

# 输出结果
for key, value in results.items():
    print(f"{list(key)} -> {value}")

运行结果

['A', 'B'] -> 12
['F', 'G'] -> 15
['A', 'B', 'C'] -> 22
['A', 'B', 'C', 'D', 'E'] -> 32
['E', 'F', 'G'] -> 25

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:45:58