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

如何实现Pandas列内列表元素的视图值求和统计算法

问题描述与解决方案

首先导入pandas库:

import pandas as pd

创建示例问题的DataFrame:

data = [[['A','B','C','D','E'],1000],
[['C','B'],2000],
[['X','Y','Z'],3000]]
df = pd.DataFrame(data=data, columns=['token','view'])

该DataFrame的结构如下:

In[0]:df
Out[0]:

              token view
0   [A, B, C, D, E] 1000
1   [C, B]          2000
2   [X, Y, Z]       3000

核心需求:统计df['token']列中每个唯一列表元素对应的view值总和。例如元素"B"出现在两行,对应view值1000和2000,需得到总和3000。现有统计代码无法正确获取当前行的view值,得到的是Series类型结果,统计错误,需修正。


步骤1:提取所有token元素并去重

lst = []
for item in df['token']:
    for it in item:
        lst.append(it)
set_token = set(lst)
unique_token = list(set_token)

去重后的结果:

In[1]:unique_token
Out[1]:
['D', 'E', 'Z', 'B', 'A', 'Y', 'C', 'X']

步骤2:初始化存储统计结果的字典

dict_token = {}
for item in unique_token:
    dict_token[item] = 0

初始化后的字典:

In[2]:dict_token
Out[2]:
{'D': 0, 'E': 0, 'Z': 0, 'B': 0, 'A': 0, 'Y': 0, 'C': 0, 'X': 0}

错误的统计代码及问题

for item in dict_token.keys():
    for it in df['token']:
        if item in it:
            dict_token[item] += df['view']

错误执行结果:

In[3]:dict_token
Out[3]:
{'D': 0    2000
 1    4000
 2    6000
 Name: view, dtype: int64,
 'E': 0    2000
 1    4000
 2    6000
 Name: view, dtype: int64,
 'Z': 0    2000
 1    4000
 2    6000
 Name: view, dtype: int64,
 'B': 0     4000
 1     8000
 2    12000
 Name: view, dtype: int64,
 'A': 0    2000
 1    4000
 2    6000
 Name: view, dtype: int64,
 'Y': 0    2000
 1    4000
 2    6000
 Name: view, dtype: int64,
 'C': 0     4000
 1     8000
 2    12000
 Name: view, dtype: int64,
 'X': 0    2000
 1    4000
 2    6000
 Name: view, dtype: int64}

问题根源:错误代码中直接累加整个df['view'] Series,而非当前行对应的单个view数值。


修正方案

方案一:修正原遍历逻辑

遍历DataFrame的每一行,同时获取当前行的token列表和对应的view值,逐个累加:

for idx, row in df.iterrows():
    tokens = row['token']
    view_val = row['view']
    for token in tokens:
        dict_token[token] += view_val

执行后得到期望结果:

Out[3]:{'D': 1000, 'E': 1000, 'Z': 3000, 'B': 3000, 'A': 1000, 'Y': 3000, 'C': 3000, 'X': 3000}

方案二:pandas原生简洁方法

使用explode展开token列表,再按token分组求和,最后转为字典:

result = df.explode('token').groupby('token')['view'].sum().to_dict()

执行结果同样符合预期:

{'A': 1000, 'B': 3000, 'C': 3000, 'D': 1000, 'E': 1000, 'X': 3000, 'Y': 3000, 'Z': 3000}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:30:58