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

如何将pandas DataFrame高效转换为3D数据立方体?

将离散3D索引的DataFrame扩展为完整数据立方体

Pandas 实现方案

核心思路是生成X、Y、Z所有可能的笛卡尔积组合,再与原数据做左连接,自动补充缺失行并填充np.nan。

import pandas as pd
import numpy as np
from itertools import product

# 示例数据
df = pd.DataFrame({'X':[1,2,3,2,3,1],
                   'Y':[1,1,2,2,3,3],
                   'Z':[1,2,1,2,1,2],
                   't':np.random.rand(6)})

# 生成X、Y、Z的全量笛卡尔积组合
all_combinations = pd.DataFrame(
    product(df['X'].unique(), df['Y'].unique(), df['Z'].unique()),
    columns=['X', 'Y', 'Z']
)

# 左连接补充缺失行,缺失的t值自动填充为NaN
full_cube = all_combinations.merge(df, on=['X', 'Y', 'Z'], how='left')

# 查看结果
print(full_cube)

该方案代码简洁易读,针对你提到的10×200×1000规模(共200万行),pandas完全可以高效处理。


NumPy 实现方案

如果追求更高性能,可采用NumPy的向量化操作,直接构建三维数据立方体,适合大规模数据场景。

import pandas as pd
import numpy as np

# 示例数据
df = pd.DataFrame({'X':[1,2,3,2,3,1],
                   'Y':[1,1,2,2,3,3],
                   'Z':[1,2,1,2,1,2],
                   't':np.random.rand(6)})

# 获取各维度的唯一值并排序(确保索引映射准确)
x_vals = np.sort(df['X'].unique())
y_vals = np.sort(df['Y'].unique())
z_vals = np.sort(df['Z'].unique())

# 创建初始值为NaN的三维数组
cube = np.full((len(x_vals), len(y_vals), len(z_vals)), np.nan)

# 将原数据的X/Y/Z值映射为数组索引
x_idx = np.searchsorted(x_vals, df['X'])
y_idx = np.searchsorted(y_vals, df['Y'])
z_idx = np.searchsorted(z_vals, df['Z'])

# 填充已有t值到三维数组对应位置
cube[x_idx, y_idx, z_idx] = df['t'].values

# 可选:将三维数组转换回DataFrame格式
all_x, all_y, all_z = np.meshgrid(x_vals, y_vals, z_vals, indexing='ij')
full_df = pd.DataFrame({
    'X': all_x.flatten(),
    'Y': all_y.flatten(),
    'Z': all_z.flatten(),
    't': cube.flatten()
})

# 查看结果
print(full_df)

此方案利用NumPy的向量化运算,内存效率更高,处理大规模数据时速度优于pandas方案,同时生成的三维数组可直接用于后续3D数据处理。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:35:40