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

Python:如何用DataFrame与字典计算业务流程分支总工时

计算各分支交易类型总工时的实现方案

先完成数据导入步骤,用Pandas结合openpyxl读取Excel并转为DataFrame:

import pandas as pd

# 读取业务流程交易表
transactions_df = pd.read_excel('业务流程交易表.xlsx', engine='openpyxl')
# 读取交易时长表
duration_df = pd.read_excel('交易时长表.xlsx', engine='openpyxl')

以下是你提到的三种实现方式,按效率从高到低排序:

1. 交易时长表转字典映射(推荐)

把交易时长表转为{Transaction Type: time in S}的字典,通过字典快速匹配交易类型对应的时长,再与发生次数相乘,这是效率最高的方法,适合大数据量:

# 构建交易类型到时长的字典
duration_dict = duration_df.set_index('Transaction Type')['time in S'].to_dict()

# 新增总工时列:匹配字典中的时长 × 发生次数
transactions_df['Effort in S'] = transactions_df['Transaction Type'].map(duration_dict) * transactions_df['occurrences']

2. Lambda函数结合apply

用apply配合lambda函数逐行匹配交易类型对应的时长,逻辑直观但效率低于字典映射,适合小数据集:

# 先把时长表转为方便查询的结构
duration_map = duration_df.set_index('Transaction Type')['time in S']

# 用apply+lambda计算总工时
transactions_df['Effort in S'] = transactions_df.apply(
    lambda row: row['occurrences'] * duration_map.get(row['Transaction Type'], 0),  # 0为缺失交易类型的默认值
    axis=1
)

3. 遍历DataFrame(不推荐)

用iterrows或itertuples遍历每一行计算,代码繁琐且效率极低,仅适合理解基础逻辑:

# 先构建时长字典
duration_dict = duration_df.set_index('Transaction Type')['time in S'].to_dict()

# 初始化总工时列
transactions_df['Effort in S'] = 0

# 遍历每一行计算
for idx, row in transactions_df.iterrows():
    trans_type = row['Transaction Type']
    if trans_type in duration_dict:
        transactions_df.at[idx, 'Effort in S'] = row['occurrences'] * duration_dict[trans_type]

按分支统计各交易类型总工时

完成总工时计算后,用groupby分组统计即可:

# 按分支和交易类型分组,求和总工时
branch_effort_summary = transactions_df.groupby(['branch', 'Transaction Type'])['Effort in S'].sum().reset_index()

# 查看结果
print(branch_effort_summary)

注意事项

  • 如果交易时长表中存在业务表没有的交易类型,不影响计算;如果业务表有不在时长表的交易类型,可根据需求设置默认值(比如上述lambda方法中的0)。
  • 优先使用字典映射的方法,Pandas的向量化操作比遍历高效得多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:02:54