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

Python Pandas透视表问题:按指定ID列表统计积分求和

解决Python中根据Team ID列表求和积分的问题

嘿,我来帮你搞定这个需求!首先我先假设你的DataFrame包含team_id(存储队伍ID)和points(存储对应积分)这两列——毕竟你没给出DataFrame的具体结构,这个假设应该贴合你的场景。

推荐:用Pandas向量化操作(高效替代for循环)

Pandas的设计初衷就是尽量避免用for循环处理数据,向量化操作不仅代码简洁,效率也高得多。这里可以用isin()方法筛选目标ID,再直接求和:

import pandas as pd

# 先模拟符合需求的DataFrame(你可以替换成自己的真实数据)
df = pd.DataFrame({
    'team_id': [1, 2, 5, 7, 10, 12],
    'points': [10, 5, 14, 8, 10, 6]
})

team_A_id = [1, 5, 10]
# 筛选出team_id在目标列表中的行,对points列求和
result_team_A = df[df['team_id'].isin(team_A_id)]['points'].sum()

print(result_team_A)  # 输出结果:34

如果你一定要用for循环实现

虽然不推荐,但如果业务场景必须用循环,也可以这么写(注意要考虑同一个team_id可能有多条数据的情况,所以每次筛选后要对points求和):

import pandas as pd

df = pd.DataFrame({
    'team_id': [1, 2, 5, 7, 10, 12],
    'points': [10, 5, 14, 8, 10, 6]
})

team_A_id = [1, 5, 10]
result_team_A = 0

for tid in team_A_id:
    # 找到当前ID对应的所有积分并求和
    current_points = df[df['team_id'] == tid]['points'].sum()
    result_team_A += current_points

print(result_team_A)  # 输出结果:34

简单解释一下:第一种方法里,df['team_id'].isin(team_A_id)会生成一个布尔数组,标记哪些行的team_id属于目标列表,用这个数组筛选DataFrame后,直接对points列求和就能得到结果。第二种循环方法则是逐个遍历目标ID,累加每个ID对应的积分总和。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:49:08