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

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)

代码解释

  1. set_index('Characteristic'):把特征列设为索引,让每个特征对应一组Total/Male/Female数据。
  2. stack():将列(Total/Male/Female)转为索引的下层,生成一个包含(特征, 类别)作为索引的Series。
  3. to_frame().T:把Series转成单行的DataFrame,此时列就是(特征, 类别)的多级索引。
  4. swaplevel(0,1):调整列的层级顺序,让特征作为上层列名,类别作为子列名,匹配你期望的格式。
  5. sort_index(axis=1, level=0):按上层特征列排序,保证列的顺序和原DataFrame中的特征顺序一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:35:17