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

如何高效利用两个二维NumPy数组构建含5000行配对数据的Pandas DataFrame

解决方法

先明确原始数据的生成逻辑:

import pandas as pd
import numpy as np

s = [ "S" + str(i) for i in range(1,101)]  # 100个样本标签
c = [ "C" + str(i) for i in range(1,51)]  # 50个类别标签

# arr1形状为(50,100):每行对应一个C,每列对应一个S
arr1 = np.random.randn(len(c),len(s))
arr2 = np.random.randn(len(c),len(s))

你给出的代码无法得到预期结果,问题在于:

  1. 直接将s和c传入DataFrame,两者长度不同(100 vs 50),无法生成5000行的笛卡尔积配对;
  2. arr1[s,c]是错误的索引方式——numpy数组仅支持整数位置索引,不能直接用字符串标签s/c取值。

正确实现方式(高效版)

利用Pandas多索引生成笛卡尔积,结合numpy数组展平操作,一步完成:

# 生成C和S的所有配对组合作为多索引
multi_index = pd.MultiIndex.from_product([c, s], names=['C', 'S'])

# 将arr1、arr2展平为一维数组(顺序与多索引完全对应),转成DataFrame后重置索引
df = pd.DataFrame({
    'arr1_col': arr1.flatten(),
    'arr2_col': arr2.flatten()
}, index=multi_index).reset_index()

另一种实现方式(直观版)

如果需要更直观的配对生成逻辑,可用itertools.product生成所有(S,C)组合后逐个取值:

import itertools

# 生成S和C的所有笛卡尔积配对
all_pairs = list(itertools.product(s, c))

# 提取对应arr1、arr2的值:arr1[C的索引, S的索引]
arr1_values = [arr1[c.index(c_label), s.index(s_label)] for s_label, c_label in all_pairs]
arr2_values = [arr2[c.index(c_label), s.index(s_label)] for s_label, c_label in all_pairs]

# 构建DataFrame
df = pd.DataFrame({
    'S': [pair[0] for pair in all_pairs],
    'C': [pair[1] for pair in all_pairs],
    'arr1_col': arr1_values,
    'arr2_col': arr2_values
})

两种方法最终都会得到5000行的DataFrame,每行对应一组(S,C)配对,arr1_col和arr2_col对应数组中的对应位置值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 03:16:09