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
相关产品推荐
相关产品推荐

