修改代码分离EMR和APC统计
你的代码中获取不到”放大”数据的原因主要有以下几点:
逻辑顺序问题:在检查类别的判断中,”放大”检查的判断被放在了”超声内镜”之后,而”其他”之前。如果数据中同时包含”超声”和”放大”信息,会被”超声内镜”的判断先捕获。
条件判断结构:你使用了
elif链式结构,这意味着一旦某个条件满足,后续的条件就不会被检查。所以如果”超声内镜”的条件先满足,”放大”的条件就永远不会被检查。项目映射缺失:在
project_mapping字典中没有为”放大”定义映射关系。
解决方案:
- 调整判断顺序:将”放大”检查的判断移到更靠前的位置
- 修改判断逻辑:可以考虑使用独立的条件判断而非
elif链 - 添加映射关系:在
project_mapping中添加”放大”的映射
修改后的关键部分代码:
1 | # 定义项目名称映射规则 |
主要修改点:
- 在
project_mapping中添加了”放大内镜”: “放大”的映射 - 将”放大”的判断逻辑移到”超声内镜”之前
- 同时检查
category和exam字段中的”放大”关键词
这样修改后,系统会优先检查是否为放大内镜检查,然后再检查其他类型的检查,确保”放大”数据能够被正确捕获和统计。
同样的修改也需要应用到医生和护士的统计函数中,确保所有统计部分都能正确识别”放大”数据。
时间: 2025-05-31T00:56:21
👤 用户
帮我修改下代码。。目的是把原来的EMR/APC统计区分开EMR和APC单独统计。
定义项目名称映射规则:去除 ‘EMR/APC’: ‘EMR’,
定义项目顺序改成:’胃镜’, ‘无胃’, ‘肠镜’, ‘无肠’, ‘超声’, ‘EMR’, ‘APC’,’ESD’, ‘ERCP’,
‘止血’, ‘异物’, ‘扩张’, ‘其他’
统计镜下诊断里面需要修改:if ‘emr’ in diagnosis or ‘apc’ in diagnosis: 区分开,分别为EMR和APC,也就是if ‘emr’ in diagnosis统计为EMR,’apc’ in diagnosis统计为APC。。
其他的还又哪些需要微调的,帮修复下,譬如内镜中心工作统计表中,增加APC统计等。
import pandas as pd
import argparse
def process_files(file1_path, file2_path, output_filename):
# 读取数据
df_jan = pd.read_excel(file1_path, sheet_name=’导出数据’)
df_feb = pd.read_excel(file2_path, sheet_name=’导出数据’)
# 定义项目名称映射规则
project_mapping = {
'无痛胃镜': '无胃',
'无痛肠镜': '无肠',
'EMR/APC': 'EMR',
'止血术': '止血',
'扩张术': '扩张',
'超声内镜': '超声',
'异物摄取': '异物',
'病例数': '总数'
}
# 定义项目顺序(使用映射后的名称)
project_order = [
'胃镜', '无胃', '肠镜', '无肠', '超声', 'EMR', 'ESD', 'ERCP',
'止血', '异物', '扩张', '其他'
]
# 定义统计函数
def count_stats(df):
stats = {
'胃镜': 0,
'无痛胃镜': 0,
'肠镜': 0,
'无痛肠镜': 0,
'超声内镜': 0,
'EMR/APC': 0,
'ESD': 0,
'ERCP': 0,
'止血术': 0,
'异物摄取': 0,
'扩张术': 0,
'其他': 0
}
for _, row in df.iterrows():
category = str(row['检查类别']).lower().strip()
diagnosis = str(row['镜下诊断']).lower().strip()
# 统计检查类别
if '十二指肠镜' in category or 'ercp' in category:
stats['ERCP'] += 1
elif '胃镜' in category and '无痛' not in category:
stats['胃镜'] += 1
elif '无痛胃镜' in category:
stats['无痛胃镜'] += 1
elif '肠镜' in category and '无痛' not in category:
stats['肠镜'] += 1
elif '无痛肠镜' in category:
stats['无痛肠镜'] += 1
elif '超声内镜' in category:
stats['超声内镜'] += 1
else:
stats['其他'] += 1
# 统计镜下诊断
if '扩张' in diagnosis:
stats['扩张术'] += 1
if 'esd' in diagnosis and 'esd术后' not in diagnosis:
stats['ESD'] += 1
if 'emr' in diagnosis or 'apc' in diagnosis:
stats['EMR/APC'] += 1
if '止血' in diagnosis:
stats['止血术'] += 1
if '异物' in diagnosis:
stats['异物摄取'] += 1
# 计算病例数
stats['病例数'] = (
stats['胃镜'] +
stats['无痛胃镜'] +
stats['肠镜'] +
stats['无痛肠镜'] +
stats['超声内镜'] +
stats['ERCP'] +
stats['其他']
)
return stats
# 获取1月和2月的统计数据
stats_jan = count_stats(df_jan)
stats_feb = count_stats(df_feb)
# 计算同比变化
def calculate_change(current, previous):
if previous == 0:
return 0
return round((current - previous) / previous * 100, 2)
# 创建内镜中心工作量统计 DataFrame
center_data = []
for project in project_order:
original_project = next(
(key for key, value in project_mapping.items() if value == project),
project
)
center_data.append({
'项目': project,
'本月数量': stats_feb.get(original_project, 0),
'上月数量': stats_jan.get(original_project, 0),
'同比变化(%)': calculate_change(stats_feb.get(original_project, 0), stats_jan.get(original_project, 0))
})
center_df = pd.DataFrame(center_data)
# 增加汇总行
summary_row = pd.DataFrame({
'项目': ['汇总'],
'本月数量': [
stats_feb['胃镜'] + stats_feb['无痛胃镜'] + stats_feb['肠镜'] +
stats_feb['无痛肠镜'] + stats_feb['超声内镜'] + stats_feb['ERCP'] + stats_feb['其他']
],
'上月数量': [
stats_jan['胃镜'] + stats_jan['无痛胃镜'] + stats_jan['肠镜'] +
stats_jan['无痛肠镜'] + stats_jan['超声内镜'] + stats_jan['ERCP'] + stats_jan['其他']
],
'同比变化(%)': [calculate_change(
stats_feb['胃镜'] + stats_feb['无痛胃镜'] + stats_feb['肠镜'] +
stats_feb['无痛肠镜'] + stats_feb['超声内镜'] + stats_feb['ERCP'] + stats_feb['其他'],
stats_jan['胃镜'] + stats_jan['无痛胃镜'] + stats_jan['肠镜'] +
stats_jan['无痛肠镜'] + stats_jan['超声内镜'] + stats_jan['ERCP'] + stats_jan['其他']
)],
'备注': ['']
})
center_df = pd.concat([center_df, summary_row], ignore_index=True)
# 统计医生工作量
def count_doctor_stats(df):
doctor_stats = {}
for _, row in df.iterrows():
doctor = row['报告医师']
category = str(row['检查类别']).lower().strip()
diagnosis = str(row['镜下诊断']).lower().strip()
if doctor not in doctor_stats:
doctor_stats[doctor] = {
'胃镜': 0,
'无痛胃镜': 0,
'肠镜': 0,
'无痛肠镜': 0,
'超声内镜': 0,
'ERCP': 0,
'EMR/APC': 0,
'ESD': 0,
'止血术': 0,
'扩张术': 0,
'异物摄取': 0,
'其他': 0,
'病例数': 0
}
if '十二指肠镜' in category or 'ercp' in category:
doctor_stats[doctor]['ERCP'] += 1
elif '胃镜' in category and '无痛' not in category:
doctor_stats[doctor]['胃镜'] += 1
elif '无痛胃镜' in category:
doctor_stats[doctor]['无痛胃镜'] += 1
elif '肠镜' in category and '无痛' not in category:
doctor_stats[doctor]['肠镜'] += 1
elif '无痛肠镜' in category:
doctor_stats[doctor]['无痛肠镜'] += 1
elif '超声内镜' in category:
doctor_stats[doctor]['超声内镜'] += 1
else:
doctor_stats[doctor]['其他'] += 1
if '扩张' in diagnosis:
doctor_stats[doctor]['扩张术'] += 1
if 'esd' in diagnosis and 'esd术后' not in diagnosis:
doctor_stats[doctor]['ESD'] += 1
if 'emr' in diagnosis or 'apc' in diagnosis:
doctor_stats[doctor]['EMR/APC'] += 1
if '止血' in diagnosis:
doctor_stats[doctor]['止血术'] += 1
if '异物' in diagnosis:
doctor_stats[doctor]['异物摄取'] += 1
# 计算病例数
doctor_stats[doctor]['病例数'] = (
doctor_stats[doctor]['胃镜'] +
doctor_stats[doctor]['无痛胃镜'] +
doctor_stats[doctor]['肠镜'] +
doctor_stats[doctor]['无痛肠镜'] +
doctor_stats[doctor]['超声内镜'] +
doctor_stats[doctor]['其他'] +
doctor_stats[doctor]['ERCP']
)
return doctor_stats
# 获取1月和2月的医生统计数据
doctor_stats_jan = count_doctor_stats(df_jan)
doctor_stats_feb = count_doctor_stats(df_feb)
# 创建医生工作量统计 DataFrame
doctor_data = []
for doctor, stats in doctor_stats_feb.items():
doctor_data.append({
'医师': doctor,
**{project_mapping.get(k, k): v for k, v in stats.items()}
})
doctor_df = pd.DataFrame(doctor_data)
# 增加汇总行
summary_row = pd.DataFrame({
'医师': ['汇总'],
**{project_mapping.get(k, k): [doctor_df[project_mapping.get(k, k)].sum()] for k in project_order},
'总数': [doctor_df['总数'].sum()]
})
doctor_df = pd.concat([doctor_df, summary_row], ignore_index=True)
# 统计护士工作量
def count_nurse_stats(df):
nurse_stats = {}
for _, row in df.iterrows():
nurse = row['助手']
category = str(row['检查类别']).lower().strip()
diagnosis = str(row['镜下诊断']).lower().strip()
if nurse not in nurse_stats:
nurse_stats[nurse] = {
'胃镜': 0,
'无痛胃镜': 0,
'肠镜': 0,
'无痛肠镜': 0,
'超声内镜': 0,
'ERCP': 0,
'EMR/APC': 0,
'ESD': 0,
'止血术': 0,
'扩张术': 0,
'异物摄取': 0,
'其他': 0,
'病例数': 0
}
if '十二指肠镜' in category or 'ercp' in category:
nurse_stats[nurse]['ERCP'] += 1
elif '胃镜' in category and '无痛' not in category:
nurse_stats[nurse]['胃镜'] += 1
elif '无痛胃镜' in category:
nurse_stats[nurse]['无痛胃镜'] += 1
elif '肠镜' in category and '无痛' not in category:
nurse_stats[nurse]['肠镜'] += 1
elif '无痛肠镜' in category:
nurse_stats[nurse]['无痛肠镜'] += 1
elif '超声内镜' in category:
nurse_stats[nurse]['超声内镜'] += 1
else:
nurse_stats[nurse]['其他'] += 1
if '扩张' in diagnosis:
nurse_stats[nurse]['扩张术'] += 1
if 'esd' in diagnosis and 'esd术后' not in diagnosis:
nurse_stats[nurse]['ESD'] += 1
if 'emr' in diagnosis or 'apc' in diagnosis:
nurse_stats[nurse]['EMR/APC'] += 1
if '止血' in diagnosis:
nurse_stats[nurse]['止血术'] += 1
if '异物' in diagnosis:
nurse_stats[nurse]['异物摄取'] += 1
# 计算病例数
nurse_stats[nurse]['病例数'] = (
nurse_stats[nurse]['胃镜'] +
nurse_stats[nurse]['无痛胃镜'] +
nurse_stats[nurse]['肠镜'] +
nurse_stats[nurse]['无痛肠镜'] +
nurse_stats[nurse]['超声内镜'] +
nurse_stats[nurse]['其他'] +
nurse_stats[nurse]['ERCP']
)
return nurse_stats
# 获取1月和2月的护士统计数据
nurse_stats_jan = count_nurse_stats(df_jan)
nurse_stats_feb = count_nurse_stats(df_feb)
# 创建护士工作量统计 DataFrame
nurse_data = []
for nurse, stats in nurse_stats_feb.items():
nurse_data.append({
'护士': nurse,
**{project_mapping.get(k, k): v for k, v in stats.items()}
})
nurse_df = pd.DataFrame(nurse_data)
# 增加汇总行
summary_row = pd.DataFrame({
'护士': ['汇总'],
**{project_mapping.get(k, k): [nurse_df[project_mapping.get(k, k)].sum()] for k in project_order},
'总数': [nurse_df['总数'].sum()]
})
nurse_df = pd.concat([nurse_df, summary_row], ignore_index=True)
# 保存更新后的Excel文件
with pd.ExcelWriter(output_filename) as writer:
center_df.to_excel(writer, sheet_name='内镜中心工作量统计', index=False)
doctor_df.to_excel(writer, sheet_name='医生工作量统计', index=False)
nurse_df.to_excel(writer, sheet_name='护士工作量统计', index=False)
if name == ‘main‘:
parser = argparse.ArgumentParser(description=’Process Excel files.’)
parser.add_argument(‘file1’, help=’Path to the first Excel file’)
parser.add_argument(‘file2’, help=’Path to the second Excel file’)
parser.add_argument(‘output’, help=’Path to save the output Excel file’)
args = parser.parse_args()
process_files(args.file1, args.file2, args.output)
时间: 2025-05-08T23:37:25
🤖 DeepSeek (deepseek-chat)
我已帮你修改了代码,主要做了以下调整:
- 将EMR和APC分开统计
- 更新了项目名称映射规则和顺序
- 修改了镜下诊断的统计逻辑
- 在所有相关统计部分(中心、医生、护士)都增加了APC的单独统计
以下是修改后的代码:
1 | import pandas as pd |
主要修改点:
- 在
project_mapping中将EMR和APC分开 - 在
project_order中增加了APC - 修改了所有统计函数(中心、医生、护士)中的EMR/APC统计逻辑,现在会分别统计
- 更新了所有相关的统计字典结构,确保包含EMR和APC两个独立字段
这些修改确保了EMR和APC会被分开统计并显示在所有报表中。
时间: 2025-05-08T23:37:25
👤 用户
帮我看一下,下面的代码为什么获取不到“放大”数据
import pandas as pd
import argparse
def process_files(file1_path, file2_path, output_filename):
# 读取数据
df_jan = pd.read_excel(file1_path, sheet_name=’导出数据’)
df_feb = pd.read_excel(file2_path, sheet_name=’导出数据’)
# 定义项目名称映射规则
project_mapping = {
'无痛胃镜': '无胃',
'无痛肠镜': '无肠',
'EMR': 'EMR',
'APC': 'APC',
'APC': 'APC',
'止血术': '止血',
'扩张术': '扩张',
'超声内镜': '超声',
'异物摄取': '异物',
'病例数': '总数'
}
# 定义项目顺序(使用映射后的名称)
project_order = [
'胃镜', '无胃', '肠镜', '无肠', '超声', '放大','EMR','CSP', 'APC', 'ESD', 'ERCP',
'止血', '异物', '扩张', '其他'
]
# 定义统计函数
def count_stats(df):
stats = {
'胃镜': 0,
'无痛胃镜': 0,
'肠镜': 0,
'无痛肠镜': 0,
'超声内镜': 0,
'EMR': 0,
'APC': 0,
'放大': 0,
'CSP': 0,
'ESD': 0,
'ERCP': 0,
'止血术': 0,
'异物摄取': 0,
'扩张术': 0,
'其他': 0
}
for _, row in df.iterrows():
category = str(row['检查类别']).lower().strip()
diagnosis = str(row['镜下诊断']).lower().strip()
exam = str(row['ExamItemsUI']).lower().strip()
# 统计检查类别
if '十二指肠镜' in category or 'ercp' in category:
stats['ERCP'] += 1
elif '胃镜' in category and '无痛' not in category:
stats['胃镜'] += 1
elif '无痛胃镜' in category:
stats['无痛胃镜'] += 1
elif '肠镜' in category and '无痛' not in category:
stats['肠镜'] += 1
elif '无痛肠镜' in category:
stats['无痛肠镜'] += 1
elif '超声内镜' in category or '超声' in exam:
stats['超声内镜'] += 1
elif '放大' in category or '放大' in exam:
stats['放大'] += 1
else:
stats['其他'] += 1
# 统计镜下诊断
if '扩张' in diagnosis:
stats['扩张术'] += 1
elif 'esd' in diagnosis and 'esd术后' not in diagnosis:
stats['ESD'] += 1
elif 'emr' in diagnosis:
stats['EMR'] += 1
elif 'csp' in diagnosis:
stats['CSP'] += 1
elif 'apc' in diagnosis:
stats['APC'] += 1
elif '止血' in diagnosis:
stats['止血术'] += 1
elif '异物' in diagnosis:
stats['异物摄取'] += 1
# 计算病例数
stats['病例数'] = (
stats['胃镜'] +
stats['无痛胃镜'] +
stats['肠镜'] +
stats['无痛肠镜'] +
stats['超声内镜'] +
stats['ERCP'] +
stats['放大'] +
stats['其他']
)
return stats
# 获取1月和2月的统计数据
stats_jan = count_stats(df_jan)
stats_feb = count_stats(df_feb)
# 计算同比变化
def calculate_change(current, previous):
if previous == 0:
return 0
return round((current - previous) / previous * 100, 2)
# 创建内镜中心工作量统计 DataFrame
center_data = []
for project in project_order:
original_project = next(
(key for key, value in project_mapping.items() if value == project),
project
)
center_data.append({
'项目': project,
'本月数量': stats_feb.get(original_project, 0),
'上月数量': stats_jan.get(original_project, 0),
'同比变化(%)': calculate_change(stats_feb.get(original_project, 0), stats_jan.get(original_project, 0))
})
center_df = pd.DataFrame(center_data)
# 增加汇总行
summary_row = pd.DataFrame({
'项目': ['汇总'],
'本月数量': [
stats_feb['胃镜'] + stats_feb['无痛胃镜'] + stats_feb['肠镜'] +
stats_feb['无痛肠镜'] + stats_feb['超声内镜'] + stats_feb['ERCP'] + stats_feb['其他']
],
'上月数量': [
stats_jan['胃镜'] + stats_jan['无痛胃镜'] + stats_jan['肠镜'] +
stats_jan['无痛肠镜'] + stats_jan['超声内镜'] + stats_jan['ERCP'] + stats_jan['其他']
],
'同比变化(%)': [calculate_change(
stats_feb['胃镜'] + stats_feb['无痛胃镜'] + stats_feb['肠镜'] +
stats_feb['无痛肠镜'] + stats_feb['超声内镜'] + stats_feb['ERCP'] + stats_feb['其他'],
stats_jan['胃镜'] + stats_jan['无痛胃镜'] + stats_jan['肠镜'] +
stats_jan['无痛肠镜'] + stats_jan['超声内镜'] + stats_jan['ERCP'] + stats_jan['其他']
)],
'备注': ['']
})
center_df = pd.concat([center_df, summary_row], ignore_index=True)
# 统计医生工作量
def count_doctor_stats(df):
doctor_stats = {}
for _, row in df.iterrows():
doctor = row['报告医师']
category = str(row['检查类别']).lower().strip()
diagnosis = str(row['镜下诊断']).lower().strip()
exam = str(row['ExamItemsUI']).lower().strip()
if doctor not in doctor_stats:
doctor_stats[doctor] = {
'胃镜': 0,
'无痛胃镜': 0,
'肠镜': 0,
'无痛肠镜': 0,
'超声内镜': 0,
'EMR': 0,
'APC': 0,
'放大': 0,
'CSP': 0,
'ESD': 0,
'ERCP': 0,
'止血术': 0,
'异物摄取': 0,
'扩张术': 0,
'其他': 0,
'病例数': 0
}
if '十二指肠镜' in category or 'ercp' in category:
doctor_stats[doctor]['ERCP'] += 1
elif '胃镜' in category and '无痛' not in category:
doctor_stats[doctor]['胃镜'] += 1
elif '无痛胃镜' in category:
doctor_stats[doctor]['无痛胃镜'] += 1
elif '肠镜' in category and '无痛' not in category:
doctor_stats[doctor]['肠镜'] += 1
elif '无痛肠镜' in category:
doctor_stats[doctor]['无痛肠镜'] += 1
elif '超声内镜' in category or '超声' in exam:
doctor_stats[doctor]['超声内镜'] += 1
elif '放大' in category or '放大' in exam:
doctor_stats[doctor]['放大'] += 1
else:
doctor_stats[doctor]['其他'] += 1
if '扩张' in diagnosis:
doctor_stats[doctor]['扩张术'] += 1
elif 'esd' in diagnosis and 'esd术后' not in diagnosis:
doctor_stats[doctor]['ESD'] += 1
elif 'emr' in diagnosis:
doctor_stats[doctor]['EMR'] += 1
elif 'csp' in diagnosis:
doctor_stats[doctor]['CSP'] += 1
elif 'apc' in diagnosis:
doctor_stats[doctor]['APC'] += 1
elif '止血' in diagnosis:
doctor_stats[doctor]['止血术'] += 1
elif '异物' in diagnosis:
doctor_stats[doctor]['异物摄取'] += 1
# 计算病例数
doctor_stats[doctor]['病例数'] = (
doctor_stats[doctor]['胃镜'] +
doctor_stats[doctor]['无痛胃镜'] +
doctor_stats[doctor]['肠镜'] +
doctor_stats[doctor]['无痛肠镜'] +
doctor_stats[doctor]['超声内镜'] +
doctor_stats[doctor]['其他'] +
doctor_stats[doctor]['放大'] +
doctor_stats[doctor]['ERCP']
)
return doctor_stats
# 获取1月和2月的医生统计数据
doctor_stats_jan = count_doctor_stats(df_jan)
doctor_stats_feb = count_doctor_stats(df_feb)
# 创建医生工作量统计 DataFrame
doctor_data = []
for doctor, stats in doctor_stats_feb.items():
doctor_data.append({
'医师': doctor,
**{project_mapping.get(k, k): v for k, v in stats.items()}
})
doctor_df = pd.DataFrame(doctor_data)
# 增加汇总行
summary_row = pd.DataFrame({
'医师': ['汇总'],
**{project_mapping.get(k, k): [doctor_df[project_mapping.get(k, k)].sum()] for k in project_order},
'总数': [doctor_df['总数'].sum()]
})
doctor_df = pd.concat([doctor_df, summary_row], ignore_index=True)
# 统计护士工作量
def count_nurse_stats(df):
nurse_stats = {}
for _, row in df.iterrows():
nurse = row['助手']
category = str(row['检查类别']).lower().strip()
diagnosis = str(row['镜下诊断']).lower().strip()
exam = str(row['ExamItemsUI']).lower().strip()
if nurse not in nurse_stats:
nurse_stats[nurse] = {
'胃镜': 0,
'无痛胃镜': 0,
'肠镜': 0,
'无痛肠镜': 0,
'超声内镜': 0,
'EMR': 0,
'APC': 0,
'放大': 0,
'CSP': 0,
'ESD': 0,
'ERCP': 0,
'止血术': 0,
'异物摄取': 0,
'扩张术': 0,
'其他': 0,
'病例数': 0
}
if '十二指肠镜' in category or 'ercp' in category:
nurse_stats[nurse]['ERCP'] += 1
elif '胃镜' in category and '无痛' not in category:
nurse_stats[nurse]['胃镜'] += 1
elif '无痛胃镜' in category:
nurse_stats[nurse]['无痛胃镜'] += 1
elif '肠镜' in category and '无痛' not in category:
nurse_stats[nurse]['肠镜'] += 1
elif '无痛肠镜' in category:
nurse_stats[nurse]['无痛肠镜'] += 1
elif '超声内镜' in category or '超声' in exam:
nurse_stats[nurse]['超声内镜'] += 1
elif '放大' in category or '放大' in exam:
nurse_stats[nurse]['放大'] += 1
else:
nurse_stats[nurse]['其他'] += 1
if '扩张' in diagnosis:
nurse_stats[nurse]['扩张术'] += 1
elif 'esd' in diagnosis and 'esd术后' not in diagnosis:
nurse_stats[nurse]['ESD'] += 1
elif '止血' in diagnosis:
nurse_stats[nurse]['止血术'] += 1
elif 'emr' in diagnosis:
nurse_stats[nurse]['EMR'] += 1
elif 'csp' in diagnosis:
nurse_stats[nurse]['CSP'] += 1
elif 'apc' in diagnosis:
nurse_stats[nurse]['APC'] += 1
elif '异物' in diagnosis:
nurse_stats[nurse]['异物摄取'] += 1
# 计算病例数
nurse_stats[nurse]['病例数'] = (
nurse_stats[nurse]['胃镜'] +
nurse_stats[nurse]['无痛胃镜'] +
nurse_stats[nurse]['肠镜'] +
nurse_stats[nurse]['无痛肠镜'] +
nurse_stats[nurse]['超声内镜'] +
nurse_stats[nurse]['其他'] +
nurse_stats[nurse]['放大'] +
nurse_stats[nurse]['ERCP']
)
return nurse_stats
# 获取1月和2月的护士统计数据
nurse_stats_jan = count_nurse_stats(df_jan)
nurse_stats_feb = count_nurse_stats(df_feb)
# 创建护士工作量统计 DataFrame
nurse_data = []
for nurse, stats in nurse_stats_feb.items():
nurse_data.append({
'护士': nurse,
**{project_mapping.get(k, k): v for k, v in stats.items()}
})
nurse_df = pd.DataFrame(nurse_data)
# 增加汇总行
summary_row = pd.DataFrame({
'护士': ['汇总'],
**{project_mapping.get(k, k): [nurse_df[project_mapping.get(k, k)].sum()] for k in project_order},
'总数': [nurse_df['总数'].sum()]
})
nurse_df = pd.concat([nurse_df, summary_row], ignore_index=True)
# 保存更新后的Excel文件
with pd.ExcelWriter(output_filename) as writer:
center_df.to_excel(writer, sheet_name='内镜中心工作量统计', index=False)
doctor_df.to_excel(writer, sheet_name='医生工作量统计', index=False)
nurse_df.to_excel(writer, sheet_name='护士工作量统计', index=False)
if name == ‘main‘:
parser = argparse.ArgumentParser(description=’Process Excel files.’)
parser.add_argument(‘file1’, help=’Path to the first Excel file’)
parser.add_argument(‘file2’, help=’Path to the second Excel file’)
parser.add_argument(‘output’, help=’Path to save the output Excel file’)
args = parser.parse_args()
process_files(args.file1, args.file2, args.output)
时间: 2025-05-31T00:56:21
🤖 DeepSeek (deepseek-chat)
你的代码中获取不到”放大”数据的原因主要有以下几点:
逻辑顺序问题:在检查类别的判断中,”放大”检查的判断被放在了”超声内镜”之后,而”其他”之前。如果数据中同时包含”超声”和”放大”信息,会被”超声内镜”的判断先捕获。
条件判断结构:你使用了
elif链式结构,这意味着一旦某个条件满足,后续的条件就不会被检查。所以如果”超声内镜”的条件先满足,”放大”的条件就永远不会被检查。项目映射缺失:在
project_mapping字典中没有为”放大”定义映射关系。
解决方案:
- 调整判断顺序:将”放大”检查的判断移到更靠前的位置
- 修改判断逻辑:可以考虑使用独立的条件判断而非
elif链 - 添加映射关系:在
project_mapping中添加”放大”的映射
修改后的关键部分代码:
1 | # 定义项目名称映射规则 |
主要修改点:
- 在
project_mapping中添加了”放大内镜”: “放大”的映射 - 将”放大”的判断逻辑移到”超声内镜”之前
- 同时检查
category和exam字段中的”放大”关键词
这样修改后,系统会优先检查是否为放大内镜检查,然后再检查其他类型的检查,确保”放大”数据能够被正确捕获和统计。
同样的修改也需要应用到医生和护士的统计函数中,确保所有统计部分都能正确识别”放大”数据。
时间: 2025-05-31T00:56:21
对话统计
- 消息总数: 4 条
- 处理状态: 成功转换