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

如何将Pandas DataFrame多行按record_number合并为单行

解决方案

可以通过以下步骤实现需求:

  1. 将record_number设为行索引,移除原DataFrame中的该列
  2. 重塑数据结构,把原列名与对应的record_number值拼接成新列名
  3. 转换为单行的目标DataFrame

具体代码如下:

import pandas as pd

df = pd.DataFrame({'Name': {0: 'Joe', 1: 'Carl', 2: 'Anton'},
                   'Level': {0: 'Beginner', 1: 'Pro', 2: 'Intermediate'},
                   'Experience': {0: 0, 1: 15, 2: 7},
                   'record_number': {0: 1, 1: 2, 2: 3}})

# 用record_number做索引,同时删除原列
df_indexed = df.set_index('record_number').drop(columns=['record_number'])
# 重塑数据并转置为单行
result = df_indexed.T.unstack().to_frame().T
# 拼接新列名:原列名_记录编号
result.columns = [f"{col[1]}_{col[0]}" for col in result.columns]

print(result)

运行后输出结果:

Name_1   Level_1  Experience_1 Name_2 Level_2  Experience_2 Name_3      Level_3  Experience_3
0    Joe  Beginner             0   Carl      Pro            15  Anton  Intermediate             7

也可以用更简洁的链式写法:

result = (df.set_index('record_number')
           .unstack()
           .to_frame()
           .T)
result.columns = [f"{col[1]}_{col[0]}" for col in result.columns]

代码说明

  • set_index('record_number'):将记录编号设为行索引,方便按编号区分每行数据
  • unstack():把行索引转为列的层级,此时列会变成双层结构(第一层是记录编号,第二层是原列名)
  • to_frame().T:将重塑后的Series转为DataFrame并转置,得到单行结构
  • 列表推导式[f"{col[1]}_{col[0]}" for col in result.columns]:把双层列名拼接成原列名_记录编号的格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 06:42:42