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

如何将Pandas Dataframe按name聚合并交替展示class与#absence列

解决Pandas Dataframe宽表转换问题

先看示例原始数据:

import pandas as pd

df = pd.DataFrame({
    'name': ['Alice', 'Alice', 'Bob', 'Bob'],
    'class': ['Math', 'English', 'Math', 'Physics'],
    '#absence': [2, 1, 0, 3]
})

要实现按name分组,每个class对应一列class值和一列absence值的宽表结构,可以用pivot结合列名调整来完成:

步骤1:执行pivot操作

指定索引为name,列名为class,同时将class和#absence作为值列,生成多级列的DataFrame:

pivoted_df = df.pivot(index='name', columns='class', values=['class', '#absence'])

步骤2:合并多级列名

把多级列名合并为可读性更强的单级列名,比如Math_class、Math_absence:

pivoted_df.columns = [f'{col[1]}_{col[0].strip("#")}' for col in pivoted_df.columns]

步骤3:重置索引(可选)

如果需要把name从索引转为普通列,执行重置索引操作:

pivoted_df = pivoted_df.reset_index()

最终得到的结果如下:

nameMath_classMath_absenceEnglish_classEnglish_absencePhysics_classPhysics_absence
AliceMath2English1NaNNaN
BobMath0NaNNaNPhysics3

如果你的数据存在name+class的重复组合,可以改用pivot_table并指定聚合函数(比如sum)来处理:

pivoted_df = df.pivot_table(index='name', columns='class', values=['class', '#absence'], aggfunc='sum')

内容的提问来源于stack exchange,提问作者Scott Gambale

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:05:20