You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:如何将宽DataFrame按相邻列对拆分为子数据集?

拆分成对列的宽DataFrame解决方案

问题场景

你有一个包含N列的宽DataFrame,列以两两成对的形式排列:每对的第一列是债券的日期序列,第二列是对应债券的历史价格,依次类推。需要将其拆分为N/2个子DataFrame,每个子DataFrame包含一对相邻列。

你的原代码出现索引错误,问题出在两处:

  • 循环范围和步长错误:range(0,len(df.columns)+1)会遍历所有列索引,没有按每2列一组的逻辑走
  • 列切片错误:i:i+3会取出3列,而你需要的是每2列一组,应该用i:i+2

正确实现代码

基础版本(直接拆分)

sub = {}
# 按步长2遍历列索引,每次处理一对列
for idx, i in enumerate(range(0, len(df.columns), 2)):
    # 取当前索引i到i+2的列(iloc切片左闭右开,i:i+2正好是2列)
    sub[f"bond_{idx+1}"] = df.iloc[:, i:i+2]
  • 用enumerate生成子DataFrame的序号,命名为bond_1、bond_2...,比用原索引更直观
  • range(0, len(df.columns), 2)确保每次跳过2列,正好覆盖所有成对列

优化版本(重命名列增强可读性)

如果想让子DataFrame的列名更清晰,可以在拆分时重命名列:

sub = {}
for idx, i in enumerate(range(0, len(df.columns), 2)):
    subset = df.iloc[:, i:i+2]
    # 重命名列:第一列保留ISIN作为日期列标识,第二列改为"price"
    subset.columns = [f"{subset.columns[0]}_date", "price"]
    sub[f"bond_{idx+1}"] = subset

比如拆分后的bond_1列名会变成XS0552790049_date和price,更易理解。

验证

拆分后可以通过sub["bond_1"]查看第一个子DataFrame,结果就是你需要的包含["XS0552790049","Unnamed: 5583"]的数据集。

内容的提问来源于stack exchange,提问作者Emanuele Pizzochera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 18:42:43