如何用Python生成DataFrame中服务代码Top10平均赔付索赔统计表格
Python实现按服务代码分组的Top10赔付统计透视表
嘿,这需求用Pandas完全能搞定,我给你写个清晰的实现方案,直接套用就行:
核心思路
我们会用Pandas的groupby+agg组合计算所需统计量,然后按平均赔付金额排序取前10,最后格式化输出成易读的表格。
完整代码示例
import pandas as pd # 1. 加载数据集(替换成你的实际数据源,比如CSV/Excel/数据库连接) df = pd.read_csv("your_claims_data.csv") # 2. 确保赔付金额字段是数值类型(如果原始数据是带$的字符串,先处理) # df["paid claims"] = pd.to_numeric(df["paid claims"].str.replace("$", ""), errors="coerce") # 3. 按服务代码分组,计算指定统计指标 code_stats = df.groupby("服务代码")["paid claims"].agg( 平均赔付金额="mean", 中位数赔付金额="median", 赔付金额标准差="std", 索赔案例数="count" ).reset_index() # 4. 按平均赔付金额降序排序,取前10项 top10_codes = code_stats.sort_values(by="平均赔付金额", ascending=False).head(10) # 5. 格式化金额列,添加$符号并保留两位小数 for col in ["平均赔付金额", "中位数赔付金额"]: top10_codes[col] = top10_codes[col].apply(lambda x: f"${x:,.2f}") # 格式化标准差,保留两位小数 top10_codes["赔付金额标准差"] = top10_codes["赔付金额标准差"].apply(lambda x: f"{x:,.2f}") # 6. 输出结果表格 print("=== Top 10服务代码(按平均赔付索赔金额排序) ===") print(top10_codes.to_string(index=False))
扩展:如果需要包含性别/服务状态维度
如果你想把性别、服务状态也加入分组维度,只需要修改groupby的参数即可:
# 按服务代码+性别+服务状态分组计算 grouped_stats = df.groupby(["服务代码", "性别", "服务状态"])["paid claims"].agg( 平均赔付金额="mean", 中位数赔付金额="median", 赔付金额标准差="std", 索赔案例数="count" ).reset_index() # 同样排序取前10 top10_groups = grouped_stats.sort_values(by="平均赔付金额", ascending=False).head(10) # 格式化输出(和上面步骤一致) for col in ["平均赔付金额", "中位数赔付金额"]: top10_groups[col] = top10_groups[col].apply(lambda x: f"${x:,.2f}") top10_groups["赔付金额标准差"] = top10_groups["赔付金额标准差"].apply(lambda x: f"{x:,.2f}") print("\n=== Top 10分组(服务代码+性别+服务状态,按平均赔付索赔金额排序) ===") print(top10_groups.to_string(index=False))
注意事项
- 如果你的
paid claims字段是带$或逗号的字符串,记得先运行代码里注释的转换步骤,把它转成数值类型。 - 如果某些分组的标准差显示为
nan,说明该分组只有1条数据(无法计算标准差),你可以用fillna(0)或者其他方式处理。 - 要是需要把结果导出成Excel/CSV,直接用
top10_codes.to_excel("top10_claims.xlsx", index=False)或者to_csv即可。
内容的提问来源于stack exchange,提问作者avogadro
相关产品推荐
相关产品推荐

