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

