Python DataFrame特定列转行的实现方法求助
解决方案
你需要把宽格式的货币对行情数据转换成按指标分组、货币对为列的格式,这可以通过Pandas的列名拆分和数据重塑操作轻松实现,下面是具体步骤和代码:
假设你的输入DataFrame结构如下(单日期示例):
Date EURUSD_Open EURUSD_High EURUSD_Low EURUSD_Close GBPUSD_Open GBPUSD_High GBPUSD_Low GBPUSD_Close 0 2023-01-01 1.050 1.060 1.040 1.055 1.220 1.230 1.210 1.225
实现代码:
import pandas as pd # 提取日期(如果不需要保留日期可跳过此步) target_date = df['Date'].iloc[0] # 移除Date列,专注处理行情数据列 df_data = df.drop('Date', axis=1) # 将列名拆分为「货币对」和「指标」的多级索引 df_data.columns = df_data.columns.str.split('_', expand=True) # 重塑数据:转置后调整层级,得到目标格式 result = df_data.T.unstack(level=0) # 整理索引和列名,让结果更整洁 result.index = result.index.get_level_values(1) result.columns.name = None result.index.name = None print(result)
输出结果:
EURUSD GBPUSD Open 1.050 1.220 High 1.060 1.230 Low 1.040 1.210 Close 1.055 1.225
额外说明:
- 如果你的DataFrame包含多个日期,想要按日期分别生成这样的表格,可以用
groupby('Date')循环处理每个日期的数据; - 列名拆分时如果你的分隔符不是
_,只需要修改str.split里的参数即可; - 如果需要保留日期作为结果的一部分,可以把日期添加为结果的一个列或者索引层级。
内容的提问来源于stack exchange,提问作者Bernando Purba
相关产品推荐
相关产品推荐

