pandas中如何为DataFrame添加合计行与费用占比列
实现方案
cumsum()是逐行累计计算的方法,无法直接生成末尾的合计行,可按以下逻辑实现需求:
- 先统计所有餐费的总金额,以此为基数计算每行餐费的占比,生成
percent列,结果保留两位小数 - 单独构造合计行:
name取值和原数据一致,meal字段填total,cost填总餐费,percent留空 - 将合计行拼接到原表末尾,重置索引得到最终结果
完整代码
import pandas as pd # 示例原始数据 df = pd.DataFrame({'name': ['adam', 'adam', 'adam'], 'meal': ['breakfast', 'lunch', 'dinner'], 'cost': [75, 120, 250]}) # 计算餐费总金额 total_cost = df['cost'].sum() # 新增百分比列 df['percent'] = (df['cost'] / total_cost * 100).round(2) # 构造合计行 total_row = pd.DataFrame({ 'name': [df['name'].iloc[0]], 'meal': ['total'], 'cost': [total_cost], 'percent': [''] }) # 拼接得到最终结果 df = pd.concat([df, total_row], ignore_index=True)
输出结果
代码运行后得到的结果和预期完全一致:
name meal cost percent 0 adam breakfast 75 16.85 1 adam lunch 120 26.97 2 adam dinner 250 56.18 3 adam total 445
如果需要处理多用户的数据集,只需要按name字段分组,分别计算每个用户的餐费总和、生成对应合计行后再统一拼接即可。
内容的提问来源于stack exchange,提问作者k07224115
相关产品推荐
相关产品推荐

