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

如何合并MultiIndex DataFrame顶层列下的固定3个子列?

合并MultiIndex DataFrame的子列内容

需求说明

现有一个多层列索引的DataFrame,结构如下:

2022-07-04                             2022-07-11
                                    27          27.1        27.2           28          28.1         28.2
index      id           employee                
1          1234565      Max         project1    customer1   in progress    project1    customer1    in progress
                                    project2    customer2   in progress    project2    customer2    in progress

需要将每个顶层列(如2022-07-04)下的3个子列内容用逗号拼接,合并为单个列,最终得到如下结构:

2022-07-04                          2022-07-11
                                    27                                  28          
index      id           employee                
1          1234565      Max         project1, customer1, in progress    project1, customer1, in progress
                                    project2, customer2, in progress    project2, customer2, in progress

解决方案

使用Pandas的分组和聚合操作批量完成合并:

import pandas as pd

# 假设原始DataFrame已加载为df
# 1. 按顶层列索引分组,将每组内的子列内容按行拼接
merged_data = df.groupby(level=0, axis=1).agg(
    lambda col_group: col_group.apply(lambda row: ', '.join(row.astype(str)), axis=1)
)

# 2. 重新设置列的多层索引,保留顶层日期和第二层的初始标识(如27、28)
unique_top_level = merged_data.columns.unique()
new_col_tuples = []
for top_level in unique_top_level:
    # 获取该顶层列下的第一个子列标识
    first_sub_col = df.columns[df.columns.get_level_values(0) == top_level][0][1]
    new_col_tuples.append((top_level, first_sub_col))

merged_df = merged_data.copy()
merged_df.columns = pd.MultiIndex.from_tuples(new_col_tuples)

代码说明

  • groupby(level=0, axis=1):按列的顶层索引(日期)分组,把同一日期下的3个子列归为一组
  • agg(...):对每组的每一行,将3个子列的字符串内容用逗号连接成单个字符串
  • 重新设置列索引:保留顶层的日期索引,同时将第二层索引设置为原组内第一个子列的标识(如27、28),匹配期望的输出结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:18:21