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

如何使用Pandas将指定DataFrame重塑为目标格式?

Pandas实现DataFrame行列结构转换

原始数据

先还原示例中的DataFrame:

import pandas as pd

data = {
    'US': [324173084, 198511109, 38526055],
    'US_bp': [41393176, 19510415, 8402643],
    'US_bp%': [12.8, 9.8, 21.8],
    'AL': [4920613, 3218517, 1260356],
    'AL_bp': [794326, 378269, 327284],
    'AL_bp%': [16.1, 11.8, 26.0]
}
df = pd.DataFrame(data, index=['total_pop', 'white', 'black'])

原始结构:

US     US_bp   US_bp%       AL   AL_bp  AL_bp%
total_pop   324173084  41393176     12.8  4920613  794326    16.1
white       198511109  19510415      9.8  3218517  378269    11.8
black        38526055   8402643     21.8  1260356  327284    26.0

目标格式

需要转换为如下结构:

place  total_pop        bp    bp%  white_pop  white_bp  white_bp%  black_pop  black_bp  black_bp%
0      US  324173084  41393176   12.8  198511109  19510415        9.8   38526055   8402643       21.8
1      AL    4920613    794326   16.1    3218517    378269       11.8   1260356   327284       26.0

(注:目标数据中black_pop的US数值存在笔误,代码会保留原始正确值)

实现步骤

1. 拆分列名,分离地区与指标

将列名按下划线_拆分,生成多级列索引,区分地区(如US、AL)和指标类型(如空、bp、bp%):

# 拆分列名,生成多级列索引
df.columns = df.columns.str.split('_', expand=True)
# 为多级列索引命名
df.columns.names = ['place', 'metric']

2. 转置并重塑数据

通过转置和堆叠调整数据结构,让地区成为行维度,人口类型+指标组合为列维度:

# 转置后堆叠,重新组织数据结构
df_transposed = df.T.unstack(level=0)

3. 整理列名与索引

将多级列名合并为目标格式的单一列名,同时重置索引把地区转为普通列:

# 合并多级列名,生成如total_pop、white_bp这类列名
df_transposed.columns = [
    f'{col[0]}_{col[1]}' if col[1] else col[0] 
    for col in df_transposed.columns
]
# 重置索引,将place从索引转为列
result = df_transposed.reset_index().rename(columns={'level_0': 'place'})

4. 调整列顺序(可选)

如果需要和目标列顺序完全匹配,手动指定列的顺序:

desired_columns = [
    'place', 'total_pop', 'bp', 'bp%',
    'white_pop', 'white_bp', 'white_bp%',
    'black_pop', 'black_bp', 'black_bp%'
]
result = result[desired_columns]

最终结果

执行上述代码后,result就是目标格式的DataFrame,打印输出即可得到符合要求的结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:52:47