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

如何在Pandas中将多行数据转为单行并按规则重命名列

问题

需要将DataFrame的多行数据转换为单行(扁平化处理),并将列名修改为「原列名_行索引」的格式,实现数据形状从(4,4)转换为(1,16)。

现有DataFrame定义:

data = {"a":[3,4,5,6],
      "b":[88,77,66,55],
      "c":["ts", "new", "thing", "here"],
      "d":[9.1,9.2,9.0,8.4]}
df = pd.DataFrame(data)

当前DataFrame输出:

a   b   c       d
0   3   88  ts      9.1
1   4   77  new     9.2
2   5   66  thing   9.0
3   6   55  here    8.4

期望的单行输出:

a_0  a_1  a_2  a_3  b_0  b_1  b_2  b_3  c_0  c_1  c_2   c_3    d_0  d_1  d_2  d_3
0   3    4    5    6    88   77   66   55   ts   new  thing here   9.1  9.2  9.0  8.4
解决方案

可以通过Pandas的层级索引操作实现需求,以下是两种简洁的实现方式:

方法一:分步操作(易理解)

# 将原DataFrame转置后展开所有行,得到多层索引的Series
flat_series = df.T.unstack()
# 把多层索引合并为「原列名_行索引」格式的列名
flat_series.index = [f"{col}_{row_idx}" for col, row_idx in flat_series.index]
# 转换为单行DataFrame并重置索引
result_df = flat_series.to_frame().T

方法二:链式调用(简洁高效)

result_df = (df
             .stack()
             .unstack(0)
             .rename(columns=lambda x: f"{x[0]}_{x[1]}")
             .T
             .reset_index(drop=True))

步骤说明:

  1. df.stack():将原DataFrame的列转为行层级,生成一个以(行索引, 列名)为多层索引的Series
  2. unstack(0):将原行索引转为列,此时列名是(原列名, 原行索引)的元组
  3. rename(columns=lambda x: f"{x[0]}_{x[1]}"):把列名元组重命名为「原列名_行索引」格式
  4. .T.reset_index(drop=True):转置后重置索引,最终得到形状为(1,16)的单行DataFrame

执行后result_df即为符合要求的输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:55:26