如何用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
相关产品推荐
相关产品推荐

