如何使用pandas按指定列聚合并将分组值转换为独立新列
pandas按分类列拆分值转宽表实现方法
你的需求属于典型的长表转宽表操作,优先使用pandas内置的透视方法实现,代码简洁且运行效率最高:
- 当每个
time和mech的组合对应唯一mes值时(也就是你给出的样例数据场景),直接用pivot即可:
import pandas as pd # 样例数据初始化 df = pd.DataFrame({ 'time': [1,2,3,1,2,3], 'mes': [50,15,16,17,49,62], 'mech': ['A','A','A','B','B','B'] }) # 核心转换逻辑 result = df.pivot( index='time', columns='mech', values='mes' ).add_prefix('mes_').reset_index()
- 如果数据中存在同一个
time+mech组合对应多条mes记录的情况,需要指定聚合规则时,换用pivot_table即可,例如取每组第一条值:
result = df.pivot_table( index='time', columns='mech', values='mes', aggfunc='first' # 可根据需求替换为sum、mean、max等聚合函数 ).add_prefix('mes_').reset_index()
执行后得到的result输出结构和预期完全一致:
time mes_A mes_B 0 1 50 17 1 2 15 49 2 3 16 62
内容的提问来源于stack exchange,提问作者apocalypsis
相关产品推荐
相关产品推荐

