如何在pandas中逐列对比数据与给定列表并按规则计算得分
Pandas 逐列匹配答案得分计算实现
以下是完整可运行的实现代码:
import pandas as pd import numpy as np # 构造测试数据,实际使用时替换为你自己的DataFrame即可 df = pd.DataFrame({ 'col1': ['A', 'A', 'D', 'A', 'A'], 'col2': ['E', '', 'B', 'D', ''], 'col3': ['C', 'D', '', 'E', 'C'] }) answer_key = ["A", "B", "C"] # 逐列计算每个单元格的得分 score_matrix = df.copy() for col_idx, col_name in enumerate(df.columns): current_correct = answer_key[col_idx] score_matrix[col_name] = np.select( condlist = [ # 匹配未作答的空值场景,兼容NaN、空字符串、带空格的空值 df[col_name].isna() | (df[col_name].str.strip() == ''), # 匹配答对的场景 df[col_name] == current_correct, # 剩余情况均为答错 True ], choicelist = [0, 5, -5] ) # 计算每行单条总得分 score_matrix['单条得分'] = score_matrix.sum(axis=1) # 计算全局总得分 total_score = score_matrix['单条得分'].sum() # 结果输出 print("各单元格得分及单条得分:") print(score_matrix) print("\n全局总得分:", total_score)
示例运行结果
针对你提供的测试数据,运行后输出结果如下:
| col1 | col2 | col3 | 单条得分 |
|---|---|---|---|
| 5 | -5 | 5 | 5 |
| 5 | 0 | -5 | 0 |
| -5 | 5 | 0 | 0 |
| 5 | -5 | -5 | -5 |
| 5 | 0 | 5 | 10 |
全局总得分:10
实现说明
- 自动按列的顺序和
answer_key的位置一一对应匹配答案,无需手动修改列名适配 - 采用向量化运算实现,相比逐行遍历
apply性能更高,适合万行以上的大数据量计算场景
内容的提问来源于stack exchange,提问作者QuangDT
相关产品推荐
相关产品推荐

