如何将Pandas DataFrame多行按record_number合并为单行
解决方案
可以通过以下步骤实现需求:
- 将
record_number设为行索引,移除原DataFrame中的该列 - 重塑数据结构,把原列名与对应的
record_number值拼接成新列名 - 转换为单行的目标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
相关产品推荐
相关产品推荐

