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

如何在Python/Pandas中高效生成索引与列名组合的矩阵

实现方案与需求说明

需求准确表述

你要实现的逻辑可以准确描述为:生成元素为对应行索引与列名字符串拼接结果的矩阵/DataFrame,结合你的使用场景也可以直接称为「96孔板孔位编码矩阵生成」,本质是行标签集合和列标签集合的笛卡尔积按行列规则排列后做字符串拼接。

最优实现方案

推荐优先用numpy广播的向量化实现,完全避免Python层循环,性能远高于嵌套for循环,代码也更简洁:

import pandas as pd
import numpy as np

# 定义行列标签
rows = list("ABCDEFGH")
columns = [str(i) for i in range(1, 13)]

# 利用numpy广播直接完成所有元素的拼接,一步生成DataFrame
wells = pd.DataFrame(
    np.array(rows)[:, np.newaxis] + np.array(columns)[np.newaxis, :],
    index=rows,
    columns=columns
)

其他可选实现

纯Python列表推导式实现

不想依赖numpy的话可以用列表推导式替代嵌套循环赋值,效率也比原生嵌套循环写法高很多:

import pandas as pd

rows = list("ABCDEFGH")
columns = [str(i) for i in range(1, 13)]

wells = pd.DataFrame(
    [[r + c for c in columns] for r in rows],
    index=rows,
    columns=columns
)

基于itertools.product的实现

你提到的itertools.product也可以用,只需把生成的结果按行列数reshape即可:

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

rows = list("ABCDEFGH")
columns = [str(i) for i in range(1, 13)]

# 生成笛卡尔积后拼接、reshape为矩阵
well_data = np.array([r + c for r, c in product(rows, columns)]).reshape(len(rows), len(columns))
wells = pd.DataFrame(well_data, index=rows, columns=columns)

性能说明

你原来的嵌套循环写法需要在Python层做96次loc赋值,每次赋值都有pandas的索引查找开销,换成向量化实现后所有运算都在底层C层完成,哪怕是384孔、1536孔这类更大规模的板也能毫秒级生成,性能提升非常明显。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:36:03