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

如何用Pandas按year和run分组聚合各Activity的duration总和并重塑DataFrame?

解决方案:Pandas 按多维度分组并重塑数据结构

你可以用Pandas的pivot_table函数直接实现需求,这是处理这类行列转换+聚合场景的标准工具:

import pandas as pd

# 假设原始数据存储在变量df中
output_df = df.pivot_table(
    values='duration',          # 需要聚合计算的字段
    index=['run', 'year'],      # 作为行标识的分组字段
    columns='activity',         # 要转换为列的字段
    aggfunc='sum',              # 聚合方式:求和
    fill_value=0                # 可选:将缺失的组合值填充为0,避免NaN
).reset_index()

# 移除列索引的名称,让结果更贴合你的目标格式
output_df.columns.name = None

代码解释

  • index=['run', 'year']:指定run和year作为行的唯一标识,每个组合对应结果中的一行
  • columns='activity':把原始的activity字段的所有唯一值转为结果的列
  • aggfunc='sum':对每个(run, year, activity)组合的duration求和
  • reset_index():把原本作为索引的run和year转为普通列,匹配你给出的目标格式

替代方案:groupby + unstack

如果你更习惯用分组操作,也可以用groupby结合unstack实现相同效果:

output_df = df.groupby(['run', 'year', 'activity'])['duration'].sum()\
              .unstack(level='activity', fill_value=0)\
              .reset_index()
output_df.columns.name = None

两种方法最终都会生成你需要的格式:run和year作为前两列,各个Activity作为后续列,单元格值对应对应分组下的总时长。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:01:35