Pandas groupby分组后如何将计算结果作为新列添加到每组所有行
解决方案
你可以通过以下两种方法实现需求:
方法1:沿用现有计算结果做合并
你已经得到的分组计算结果是带有stay_id、starttime多级索引的Series,直接将其和原表按分组字段合并即可:
# 先保存你已经计算得到的分组结果 grouped_res = df.groupby(['stay_id', 'starttime']).apply(helper) # 重命名结果列后和原表左连接,自动匹配同分组的所有行 df = df.merge(grouped_res.rename('d_hour'), on=['stay_id', 'starttime'], how='left')
方法2:用transform一步添加新列(更简洁)
不需要单独计算分组结果再合并,groupby.transform会自动把分组计算的标量结果广播到分组内所有行,直接赋值为新列即可:
import pandas as pd def helper(rows): # 可选:增加空值判断,避免分组无day==0行时报错 day0_rows = rows[rows["day"] == 0] if day0_rows.empty: return pd.NA # 可自定义默认值 min_dd = day0_rows["dd"].min() return day0_rows[day0_rows["dd"] == min_dd]["total"].iloc[0] # 直接生成和原表行数一致的d_hour列 df["d_hour"] = df.groupby(['stay_id', 'starttime'])[['day','dd','total']].transform(helper)
两种方法最终得到的结果都和你给出的预期输出一致。
内容的提问来源于stack exchange,提问作者Priya
相关产品推荐
相关产品推荐

