You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas按ID分组求和后将Rate总额写入Status为P的Total列

Pandas 按ID分组汇总房费并仅填充主住客行的实现方案

原有方案问题

直接调用df.groupby(["ID"]).Rate.sum().reset_index()会按ID维度做聚合,每个ID仅返回1条汇总记录,会丢失同ID下的同住人明细行,自然无法实现按Status条件赋值的需求。

实现思路

使用groupby配套的transform方法做分组求和,该方法会把分组计算出的总和按原表的行索引对齐返回,不会压缩行数、丢失原始记录,之后通过条件判断给Total列赋值即可:

  • 按ID分组计算每个房间的总房费,将结果广播到同ID的每一行
  • 逐行判断Status值:值为P的主住客行,Total列填入对应房间总房费;值为S的同住人行,Total列填0

完整代码

import pandas as pd
import numpy as np

# 原始数据表
df = pd.DataFrame({
    'ID':[1182,2554,1182,2658,5489,2658],
    'Fname':['Tom','Harry','Trisha','Ben','Susan','Brenda'],
    'Rate':[125.00,89.00,135.00,25.00,145.00,19.00],
    'Status':['P','S','P','P','P','S'],
    'Total':[0,0,0,0,0,0]
})

# 按ID分组计算单房总房费,结果与原表行对齐
df['room_total'] = df.groupby('ID')['Rate'].transform('sum')
# 按Status规则给Total列赋值
df['Total'] = np.where(df['Status'] == 'P', df['room_total'], 0)
# 清理临时计算列
df = df.drop(columns=['room_total'])

运行上述代码后所有原始记录完整保留,Total列填充逻辑完全匹配需求规则。


内容的提问来源于stack exchange,提问作者Boomer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:42:29