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

如何在Pandas中基于Subject ID统计分数并生成字典?

解决方案:计算每个Subject ID的分数总和并存为字典

嘿,这问题我帮你搞定!这里有两种靠谱的解决方案,看哪种更适合你的场景:

方法一:使用Pandas(推荐,适合表格类数据处理)

如果你的数据是在表格文件(比如CSV、Excel)里,或者已经能转成DataFrame,用Pandas会非常高效:

import pandas as pd

# 构造你的数据(如果是从文件读取,用pd.read_csv/pd.read_excel即可)
data = {
    "subject": ["phchp005", "phchp005", "phchp006", "phchp006", "phchp006", "phchp006", "phchp006", "phchp006", "phchp006", "phchp006", "phchp006", "phchp008"],
    "Score": [1, 0, None, None, 0, 0, 0, 0, 1, 1, 1, None]
}
df = pd.DataFrame(data)

# 步骤1:将NaN填充为0
df["Score"] = df["Score"].fillna(0)

# 步骤2:按subject分组,计算每个组的Score总和
score_sum = df.groupby("subject")["Score"].sum().astype(int)

# 步骤3:转成你需要的字典格式
result_dict = score_sum.to_dict()

print(result_dict)
# 输出:{'phchp005': 1, 'phchp006': 3, 'phchp008': 0}

解释:

  • fillna(0) 自动把所有空值(NaN)替换成0,完美解决你的空值问题
  • groupby("subject")["Score"].sum() 会自动按Subject ID分组,计算每个组的分数总和
  • astype(int) 确保总和是整数类型(因为Pandas求和后可能是浮点数)
  • to_dict() 直接把分组后的结果转成键值对字典

方法二:纯Python手动处理(不依赖第三方库)

如果不想用Pandas,纯Python也能轻松实现:

# 先把你的数据整理成列表(每个元素是(subject, score)的元组)
data_list = [
    ("phchp005", 1),
    ("phchp005", 0),
    ("phchp006", None),
    ("phchp006", None),
    ("phchp006", 0),
    ("phchp006", 0),
    ("phchp006", 0),
    ("phchp006", 0),
    ("phchp006", 1),
    ("phchp006", 1),
    ("phchp006", 1),
    ("phchp008", None)
]

# 初始化空字典用于存储结果
result_dict = {}

# 遍历每一条数据
for subject, score in data_list:
    # 处理空值:如果score是None,替换成0
    current_score = score if score is not None else 0
    # 累加分数:如果ID已在字典里,就加;不在的话就初始化为当前分数
    if subject in result_dict:
        result_dict[subject] += current_score
    else:
        result_dict[subject] = current_score

print(result_dict)
# 输出:{'phchp005': 1, 'phchp006': 3, 'phchp008': 0}

解释:

  • 先把原始数据转成列表元组的形式(如果是从其他地方读取,你可以先做这一步转换)
  • 遍历过程中手动处理空值,替换为0
  • 通过判断Subject ID是否在字典中,实现分数的累加逻辑

两种方法都能得到你想要的结果,按需选择就行!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 22:07:47