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

如何修改Pandas分组聚合后的多级列名并重置索引?

解决方案

要将Pandas的多级列索引转换为你期望的单级表头,只需遍历多级索引的元组,根据二级索引是否为空确定最终列名,步骤如下:

核心处理代码

# 转换多级列索引为单级
df.columns = [col[1] if col[1] else col[0] for col in df.columns]
# 移除不需要的JoinTimes列(匹配你的期望样式)
df = df.drop('JoinTimes', axis=1)

完整示例代码

import pandas as pd
df = pd.DataFrame({"Attended":["Yes","Yes","Yes"]
                    ,"Email":["009indrajeet","09871143420.ms","09s.bisht"]
                    ,"JoinTime":["Dec 3, 2022 19:50:52","Dec 3, 2022 20:10:52","Dec 3, 2022 21:47:32"]})
# 转换为时间戳列
df['JoinTime'] = pd.to_datetime(df['JoinTime'],format='%b %d, %Y %H:%M:%S', errors='raise')
# 提取日期
df['JoinDate'] = df['JoinTime'].dt.date
# 分组
df_grp = df.groupby(["Attended","Email","JoinDate"])
# 聚合规则
dict_agg = {'JoinTime':[('JoinTimeFirst','min'),('JoinTimeLast','max'),('JoinTimes',set)]}
# 执行聚合并重置索引
df = df_grp.agg(dict_agg).reset_index() 

# 处理表头
df.columns = [col[1] if col[1] else col[0] for col in df.columns]
# 删除多余列
df = df.drop('JoinTimes', axis=1)

# 查看结果
print(df)

说明

  • 遍历MultiIndex的每个元组时,若二级索引(元组第二个元素)不为空,则使用该值作为列名;若为空字符串,则保留一级索引的名称。
  • 由于聚合规则中生成了JoinTimes列,但你的期望样式中不需要,因此用drop方法移除该列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:40:23