我的代码需要如何修改,才能读取第一张图(文件数据)转换成第二张图(文件数据)样式呢,目前代码导出来是图三样式
图1
import pandas as pd
# 读取第一份 Excel 表格
df = pd.read_excel("C:/Users/Administrator/Desktop/data/工作簿1.xlsx")
# 使用逗号替换斜杠来分隔多个值
df['就诊类型'] = df['就诊类型'].str.replace('/', ',')
df['预约医生'] = df['预约医生'].str.replace('/', ',')
df['操作类型'] = df['操作类型'].str.replace('/', ',')
df['收费大类'] = df['收费大类'].str.replace(',', ',')
# 将同个患者姓名的就诊类型替换为"初诊"后面跟着次数和"复诊"后面跟着次数的形式
df['就诊类型'] = df.groupby('患者姓名')['就诊类型'].transform(lambda x: f"初诊{len(x[x=='初诊'])},复诊{len(x[x=='复诊'])}" if len(x) > 1 else x)
# 根据姓名进行分组,并使用聚合函数将其他列的值进行合并
aggregations = {
'性别': 'first',
'就诊类型': ','.join,
'预约医生': ','.join,
'操作类型': ','.join,
'收费大类': ','.join,
'数量': 'sum',
'开单单价': 'sum',
'折后应收': 'sum',
'收款金额': 'sum',
'欠费': 'sum',
'医生': 'first'
}
df_new = df.groupby('患者姓名').agg(aggregations).reset_index()
# 重新排序列的顺序
column_order = ['患者姓名', '性别', '就诊类型', '预约医生', '操作类型', '收费大类', '数量', '开单单价', '折后应收', '收款金额', '欠费', '医生']
df_new = df_new[column_order]
# 将结果保存为第二份 Excel 表格
df_new.to_excel("C:/Users/Administrator/Desktop/data/新工作薄1.xlsx",index=False)
数据都是对的,就是样式不是想要的吗?你指的是单元格小数点位数还是第一行的底色?
我理解的样式问题:
df = pd.read_excel("C:/Users/Administrator/Desktop/data/工作簿1.xlsx",dtype={"开单单价": pd.Float32Dtype()})
def func_count(x):
val_series = x.value_counts()
return ",".join([f"{xx}{val_series[xx]}" for xx in val_series.index])
aggregations = {
'性别': 'first',
'就诊类型': lambda x: func_count(x),
'预约医生':lambda x: func_count(x),
'操作类型': lambda x: func_count(x),
'收费大类': lambda x: func_count(x),
'数量': 'sum',
'开单单价': 'sum',
'折后应收': 'sum',
'收款金额': 'sum',
'欠费': 'sum',
'医生': lambda x: func_count(x),
}
df_new = df.groupby('患者姓名').agg(aggregations).reset_index()
不知道你这个问题是否已经解决, 如果还没有解决的话: