如何用Python将含浮点值的Yes/No结果转换为指定表格格式
解决方案
1. 修正比例计算的错误
你代码里的value_counts(['yes'])是错误用法,value_counts的normalize参数需要传入布尔值True来返回比例,而非传入值列表。修正后的单个部门比例计算代码如下:
# 计算sales部门流失率比例并保留两位小数 sales_attr = emp_data[emp_data['dept'] == 'sales']['attrition'].value_counts(normalize=True) * 100 sales_attr = sales_attr.round(2)
2. 构造目标表格结构
将得到的Series结果转换为符合你需求的表格格式,这里提供两种方式:
方式一:单个部门生成指定HTML表格
import pandas as pd # 构造对应DataFrame sales_df = pd.DataFrame({ '部门': ['sales'], 'Yes': [sales_attr.get('yes', 0.0)], # 若'yes'不存在则返回0.0 'No': [sales_attr.get('no', 0.0)] # 若'no'不存在则返回0.0 }) # 生成你需要的HTML表格 target_html = """ <h2>表格名称:按部门划分的流失率</h2> <div class="s-table-container"> <table class="s-table"> <thead> <tr> <th style="text-align: left;">部门</th> <th style="text-align: left;">Yes</th> <th style="text-align: left;">No</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">{}</td> <td style="text-align: left;">{}</td> <td style="text-align: left;">{}</td> </tr> </tbody> </table> </div> """.format(sales_df.iloc[0]['部门'], sales_df.iloc[0]['Yes'], sales_df.iloc[0]['No']) print(target_html)
运行后会输出你想要的HTML表格代码,渲染后效果如下:
表格名称:按部门划分的流失率
| 部门 | Yes | No |
|---|---|---|
| sales | 24.49 | 75.51 |
方式二:批量处理所有部门
如果需要一次性统计所有部门的流失率并生成表格,可使用groupby批量处理:
# 按部门分组计算流失率比例 all_dept_attr = emp_data.groupby('dept')['attrition'].value_counts(normalize=True).unstack(fill_value=0) * 100 all_dept_attr = all_dept_attr.round(2) # 调整列名和索引,匹配目标格式 all_dept_attr = all_dept_attr.reset_index().rename(columns={'yes': 'Yes', 'no': 'No', 'dept': '部门'}) # 生成批量HTML表格行 table_rows = "" for _, row in all_dept_attr.iterrows(): table_rows += f""" <tr> <td style="text-align: left;">{row['部门']}</td> <td style="text-align: left;">{row['Yes']}</td> <td style="text-align: left;">{row['No']}</td> </tr> """ # 拼接完整HTML表格 full_target_html = f""" <h2>表格名称:按部门划分的流失率</h2> <div class="s-table-container"> <table class="s-table"> <thead> <tr> <th style="text-align: left;">部门</th> <th style="text-align: left;">Yes</th> <th style="text-align: left;">No</th> </tr> </thead> <tbody> {table_rows} </tbody> </table> </div> """ print(full_target_html)
内容的提问来源于stack exchange,提问作者Akalika Callistus Anthony
相关产品推荐
相关产品推荐

