如何优雅地将Pandas DataFrame中的行重排为列并合并行列
解决Pandas DataFrame行列合并重排的需求
我来帮你搞定这个DataFrame的重排需求!先明确一下你的目标:把原来两行的DataFrame,转成以'A'为索引的单行,同时把原行号和列名组合成新的列名(比如1-PS、2-10PSS这种格式)。
第一步:构造初始DataFrame
先把你给出的初始数据用代码复现出来,方便后续操作:
import pandas as pd # 初始DataFrame df = pd.DataFrame( data=[[6, 263, 5, 23, 2, 101], [5, 49, 2, 30, 1, 30]], index=[1, 2], columns=["PS", "PSS", "10PS", "10PSS", "5PS", "5PSS"] )
第二步:实现重排的简洁方法
这里用stack()配合索引映射的方式,一步到位完成行列合并:
# 堆叠列到内层索引,得到(行号, 列名)的多级索引Series stacked_series = df.stack() # 把多级索引转成"行号-列名"的字符串格式 stacked_series.index = stacked_series.index.map(lambda idx: f"{idx[0]}-{idx[1]}") # 转置成单行DataFrame,并设置新索引为'A' result_df = stacked_series.to_frame().T result_df.index = ["A"]
最终结果
运行完上面的代码后,result_df就是你想要的格式:
1-PS 1-PSS 1-10PS 1-10PSS 1-5PS 1-5PSS 2-PS 2-PSS 2-10PS 2-10PSS 2-5PS 2-5PSS A 6 263 5 23 2 101 5 49 2 30 1 30
步骤解释
df.stack():把原DataFrame的列转成内层索引,此时得到的Series的索引是(行号, 列名)的组合,值对应原单元格的数据;index.map(...):把每个多级索引元素转换成"行号-列名"的字符串,作为新的列名基础;to_frame().T:把Series转成DataFrame后再转置,就得到了单行的结构;index = ["A"]:最后把索引设置为你需要的'A'。
内容的提问来源于stack exchange,提问作者Sukhi Kaur
相关产品推荐
相关产品推荐

