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

多个pandas DataFrame按数值比较计算得分 无冗余for循环实现方案

解决方案

核心思路是通过表对齐+向量化运算替代行遍历,仅用数行Pandas原生操作即可完成计算,性能远高于逐行循环实现,同时支持动态变化的职业、组别、指标列:

import pandas as pd

# 1. 动态获取所有指标列(自动适配新增/删除的指标,无需硬编码)
metric_cols = [col for col in summary_data.columns if col not in ["Profession", "Group"]]

# 2. 重命名阈值、权重表的指标列,避免合并时列名冲突
thresh_renamed = threshold_data.rename(columns={col: f"{col}_thresh" for col in metric_cols})
weight_renamed = weightage_data.rename(columns={col: f"{col}_weight" for col in metric_cols})

# 3. 按职业+组别对齐三个表的数据
merged_df = summary_data.merge(
    thresh_renamed, on=["Profession", "Group"], how="left"
).merge(
    weight_renamed, on=["Profession", "Group"], how="left"
)

# 4. 全向量化计算总分:符合阈值则累加对应权重
# 生成指标是否达标的布尔掩码
reach_threshold_mask = merged_df[metric_cols].ge(merged_df[[f"{c}_thresh" for c in metric_cols]].values)
# 提取对应权重矩阵
weight_matrix = merged_df[[f"{c}_weight" for c in metric_cols]]
# 按行累加符合条件的权重得到总分
summary_data["total_score"] = reach_threshold_mask.mul(weight_matrix.values).sum(axis=1)

结果验证

运行后summary_data的total_score列结果完全匹配需求规则,示例验证:

  • 职业为Doctor、组别为1的两名人员得分分别为12、7,和需求举例完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:54:08