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

如何将Pandas DataFrame从x行y列重构为1行x*y列格式?

Pandas 行索引转列名后缀并合并为单行

问题场景

将x行y列的DataFrame转换为1行x*y列的格式,新列名规则为「原列名_行索引」。例如原DataFrame包含name、age等列,目标格式需把每行数据按name_0、age_0、name_1、age_1这样的列名合并为单行。

解决方案

针对你用df.unstack().to_frame().T得到多级列索引的问题,核心是合并多级列索引为单个字符串列名,以下是两种可行实现方式:

方法1:直接处理unstack后的多级列

import pandas as pd

# 构造示例DataFrame(行索引为自定义值)
df = pd.DataFrame(
    {'name': ['Alice', 'Bob', 'Charlie'],
     'age': [25, 30, 35],
     'city': ['NY', 'LA', 'Chicago']},
    index=[10, 20, 30]
)

# 1. 将行索引转为列的第二层级
stacked = df.unstack()
# 2. 合并多级列的两个层级,生成「原列名_行索引」格式的新列名
stacked.columns = [f"{col}_{idx}" for col, idx in stacked.columns]
# 3. 转换为单行DataFrame
result = stacked.to_frame().T

方法2:通过重置索引+重塑实现

如果对多级索引操作不熟悉,也可以用更直观的宽长转换流程:

# 1. 将行索引转为普通列(命名为row_idx)
df_reset = df.reset_index(names='row_idx')
# 2. 宽转长,拆分列名和对应值
melted = df_reset.melt(id_vars='row_idx', var_name='col_name', value_name='value')
# 3. 拼接生成新列名
melted['new_col'] = melted['col_name'] + '_' + melted['row_idx'].astype(str)
# 4. 长转宽,得到单行结果
result = melted.pivot(index=None, columns='new_col', values='value').reset_index(drop=True)

效果验证

两种方法最终生成的结果一致,示例输出如下:

name_10name_20name_30age_10age_20age_30city_10city_20city_30
AliceBobCharlie253035NYLAChicago

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 11:57:18