Pandas:保留name索引时如何按date聚合cost列?
解决方案
你可以通过以下两种方式实现需求,既保留date和name作为多层索引,又让cost列仅按date层级求和:
方法1:先聚合再合并
- 先单独计算每个日期的总费用:
date_cost_total = df1.groupby('date')['cost'].sum().reset_index(name='cost')
- 将聚合结果与原表合并,确保每个
date下的所有name都能拿到对应日期的总费用:
df_merged = pd.merge(df1[['date', 'name']], date_cost_total, on='date', how='left')
- 设置多层索引得到目标格式:
df_desired = df_merged.set_index(['date', 'name'])
方法2:用transform直接生成汇总列
这种方式更简洁,通过groupby.transform直接在原表中生成每个日期的总费用列,再设置索引:
df1['cost'] = df1.groupby('date')['cost'].transform('sum') df_desired = df1.set_index(['date', 'name'])
两种方法最终生成的df_desired都会保留date和name的多层索引结构,且cost列的值是对应日期的总费用,不会按name拆分聚合。
内容的提问来源于stack exchange,提问作者akaJasonK
相关产品推荐
相关产品推荐

