如何将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_10 | name_20 | name_30 | age_10 | age_20 | age_30 | city_10 | city_20 | city_30 |
|---|---|---|---|---|---|---|---|---|
| Alice | Bob | Charlie | 25 | 30 | 35 | NY | LA | Chicago |
内容的提问来源于stack exchange,提问作者noblerthanoedipus
相关产品推荐
相关产品推荐

