如何在Pandas中转置指定DataFrame为样本×步骤格式?
Pandas中转置多层结构DataFrame的实现方法
现有如下Pandas DataFrame构建代码:
import pandas as pd df = pd.DataFrame([[[1, 2, 3]], [[4, 5, 6]]], index=['step1', 'step2'], columns=['process'])
执行后得到初始DataFrame:
process step1 [1, 2, 3] step2 [4, 5, 6]
经过以下步骤处理:
df1 = df['process'].apply(pd.Series).rename(columns=lambda x: f'sp {x+1}') out = pd.concat([df1], keys=['process'], axis=1)
得到out的结构为:
process sp 1 sp 2 sp 3 step1 1 2 3 step2 4 5 6
需要将其转置为**(sample×step)**的格式,目标结果如下:
process step1 step2 sp 1 1 4 sp 2 2 5 sp 3 3 6
方法一:基于最终out直接处理
通过转置+索引层级调整即可实现目标格式:
# 转置DataFrame,交换列索引层级并排序 result = out.T.swaplevel(0, 1).sort_index()
代码解释:
out.T:将原DataFrame转置,此时行索引变为原列的多层索引('process', 'sp 1')等,列变为原行索引step1、step2;swaplevel(0,1):交换行索引的两个层级,将sp x调整为外层行索引,process调整为内层;sort_index():对行索引进行排序,保证结构整齐。
方法二:在中间步骤df1直接处理
如果不需要保留out的结构,可以直接在生成df1后一步到位:
df1 = df['process'].apply(pd.Series).rename(columns=lambda x: f'sp {x+1}') # 转置后添加列层级并调整 result = df1.T.rename_axis(index=None, columns='process').swaplevel(axis=1)
此方法更简洁,直接从df1生成目标格式。
内容的提问来源于stack exchange,提问作者Nicholas TI
相关产品推荐
相关产品推荐

