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

如何将Pandas DataFrame的X/Y/Z列转换为含1500列的新DataFrame?

如何将三列Pandas DataFrame转换为1500列的新DataFrame?

问题描述

我有一个包含X、Y、Z三列的Pandas DataFrame,每列包含10万条数据。希望创建一个新的Pandas DataFrame,其列名为X0、X1……X499、Y0、Y1……Y499、Z0、Z1……Z499(总计1500列),新DataFrame的行数据取自原DataFrame。

尝试的代码

data1 = pd.read_excel('/content/sattle1.2.xlsx')
X_np = data1['X'].to_numpy()
Y_np = data1['Y'].to_numpy()
Z_np = data1['Z'].to_numpy()
i = 0
for i in range(len(X_np)):
    # append 500 of x, y, and z 
    row = np.concatenate(X_np[0:500], Y_np[0:500], Z_np[0:500])
    row = pd.DataFrame(row).T
    # append this row to the result DataFrame
    result1 = pd.concat([result1, row], ignore_index=True)

原代码存在的问题

  1. 性能极差:循环10万次调用pd.concat,每次操作都会复制整个DataFrame,时间复杂度为O(n²),处理10万条数据会异常缓慢。
  2. 语法错误:np.concatenate需要传入数组列表作为参数,正确写法应为np.concatenate([X_np[0:500], Y_np[0:500], Z_np[0:500]])。
  3. 逻辑不符需求:每次循环都取原数据的前500条,导致新DataFrame所有行内容完全相同,不符合“行数据取自原DataFrame不同位置”的实际需求(推测你需要滑动窗口式的连续数据截取)。

高效实现方案

假设需求是:新DataFrame的第i行由原DataFrame中X列的第i到i+499个元素、Y列的第i到i+499个元素、Z列的第i到i+499个元素组成(滑动窗口截取),最终新DataFrame行数为100000 - 500 + 1 = 99501行,列数1500。

实现代码:

import pandas as pd
import numpy as np

# 读取数据
data1 = pd.read_excel('/content/sattle1.2.xlsx')
window_size = 500

# 生成各列的滑动窗口数组(numpy 1.20+支持sliding_window_view)
X_window = np.lib.stride_tricks.sliding_window_view(data1['X'].to_numpy(), window_size)
Y_window = np.lib.stride_tricks.sliding_window_view(data1['Y'].to_numpy(), window_size)
Z_window = np.lib.stride_tricks.sliding_window_view(data1['Z'].to_numpy(), window_size)

# 按列拼接三个窗口数组
combined_data = np.concatenate([X_window, Y_window, Z_window], axis=1)

# 生成列名
columns = [f'X{i}' for i in range(window_size)] + \
          [f'Y{i}' for i in range(window_size)] + \
          [f'Z{i}' for i in range(window_size)]

# 创建最终DataFrame
result1 = pd.DataFrame(combined_data, columns=columns)

说明

  • 使用np.lib.stride_tricks.sliding_window_view生成滑动窗口,无需复制数据,内存和时间效率极高。
  • 一次性拼接所有数据后转为DataFrame,避免循环中的重复复制操作。
  • 列名严格按照X0-X499、Y0-Y499、Z0-Z499的规则生成。

内容的提问来源于stack exchange,提问作者Dhuha Firas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:12:37