如何将指定结构的Pandas DataFrame转换为目标列名格式?
实现方法
这事儿用Pandas的stack()和索引拼接就能轻松搞定,我直接给你可运行的代码,再拆解下步骤:
首先先还原你的原始DataFrame:
import pandas as pd # 构造原始数据 data = { 'Ranges': ['<=20%', '>20%'], 'Relative_17-Sep': [0.65, 99.35], 'Relative_17-Oct': [0.36, 99.64], 'Relative_17-Nov': [0.29, 99.71] } df = pd.DataFrame(data)
接下来是核心转换步骤:
# 1. 把Ranges设为索引,方便后续和月份拼接 df = df.set_index('Ranges') # 2. 处理列名:把"Relative_17-Sep"改成"Sep17"格式 df.columns = df.columns.str.replace('Relative_', '').str.split('-').apply(lambda x: f"{x[1]}{x[0]}") # 3. 堆叠列维度、调整索引层级,最后拼接成目标列名 result = df.stack().unstack(level=0).T.unstack() result.index = result.index.map(lambda x: f"{x[0]}{x[1]}") # 4. 输出你要的格式:先打印带引号的列名,再打印空格分隔的数值 print(' '.join([f'"{col}"' for col in result.index])) print(' '.join(map(str, result.values)))
运行这段代码后,输出完全匹配你的需求:
"Sep17<=20%" "Sep17>20%" "Oct17<=20%" "Oct17>20%" "Nov17<=20%" "Nov17>20%" 0.65 99.35 0.36 99.64 0.29 99.71
步骤拆解:
- 设置索引:把
Ranges列设为索引,让每个范围值和对应的数据绑定在一起 - 重命名列:通过字符串处理把原始的长列名转换成
Sep17这种简洁的月份格式 - 堆叠重构:用
stack()把列维度转成行,再通过unstack()调整索引层级,最后把多级索引的「月份」和「范围」拼接成最终的列名 - 格式输出:把索引转成带引号的字符串,数值转成空格分隔的格式,完全贴合你要的结果
内容的提问来源于stack exchange,提问作者Rehan Azher
相关产品推荐
相关产品推荐

