Python中如何将DataFrame重排为带子列的单行格式?
将Pandas DataFrame重排为带多级列的单行格式
核心思路
把原DataFrame中的每个Characteristic值作为上层列名,对应的Total/Male/Female作为下层子列,最终将所有数据整合成一行。
实现代码
import pandas as pd # 构造你的输入DataFrame(如果已有可跳过此步) data = { 'Characteristic': ['Total population by age groups', '0 to 4 years', '5 to 9 years', '10 to 14 years', '15 to 19 years', '15 years'], 'Total': [105145.0, 5660.0, 4105.0, 4025.0, 5105.0, 925.0], 'Male': [50080.0, 2975.0, 2055.0, 1980.0, 2555.0, 455.0], 'Female': [55060.0, 2685.0, 2050.0, 2040.0, 2545.0, 470.0] } df = pd.DataFrame(data) # 关键转换步骤 # 1. 将Characteristic列设为索引,堆叠数据生成多级索引的Series stacked_series = df.set_index('Characteristic').stack() # 2. 将Series转为单行DataFrame,此时列是(特征, 类别)的多级结构 result_df = stacked_series.to_frame().T # 3. 交换列层级,让特征作为上层列,类别作为子列 result_df.columns = result_df.columns.swaplevel(0, 1) # 4. 按上层列排序,保证列顺序和原数据一致 result_df = result_df.sort_index(axis=1, level=0) # 查看结果 print(result_df)
代码解释
set_index('Characteristic'):把特征列设为索引,让每个特征对应一组Total/Male/Female数据。stack():将列(Total/Male/Female)转为索引的下层,生成一个包含(特征, 类别)作为索引的Series。to_frame().T:把Series转成单行的DataFrame,此时列就是(特征, 类别)的多级索引。swaplevel(0,1):调整列的层级顺序,让特征作为上层列名,类别作为子列名,匹配你期望的格式。sort_index(axis=1, level=0):按上层特征列排序,保证列的顺序和原DataFrame中的特征顺序一致。
内容的提问来源于stack exchange,提问作者NotarealUsername
相关产品推荐
相关产品推荐

