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

如何实现DataFrame的元素行列重复扩展(将3×3格式转换为3n×3n格式)

实现矩阵元素行列双向重复的方案

针对你提出的需求,我们可以通过两种简洁的方式实现:一种是利用numpy的向量化操作(推荐,效率更高),另一种是使用pandas的原生方法。下面结合n=2的例子详细说明:

方法一:使用numpy快速实现(推荐)

numpy的repeat函数可以指定轴方向重复元素,完美匹配我们的需求:先在列方向把每个元素重复n次,再在行方向把每一行重复n次。

import numpy as np
import pandas as pd

# 初始化原始DataFrame
X = pd.DataFrame([[0,1,2], [1,0,3], [2,3,0]])
n = 2

# 第一步:沿列轴(axis=1)重复每个元素n次,得到3×(3n)的矩阵
col_expanded = np.repeat(X.values, n, axis=1)
# 第二步:沿行轴(axis=0)重复每一行n次,得到(3n)×(3n)的最终矩阵
final_matrix = np.repeat(col_expanded, n, axis=0)

# 转换回DataFrame格式
result_df = pd.DataFrame(final_matrix)
print(result_df)

代码解释:

  • X.values:提取DataFrame底层的numpy数组,方便进行向量化操作;
  • np.repeat(..., axis=1):对每个元素在**横向(列方向)**重复n次,比如原行[0,1,2]会变成[0,0,1,1,2,2];
  • np.repeat(..., axis=0):对每一行在**纵向(行方向)**重复n次,比如上面的行会连续出现两次;
  • 最终转换回DataFrame后,就是你期望的6×6矩阵。

方法二:使用pandas原生方法实现

如果你更倾向于纯pandas操作,可以通过apply和索引重复来实现:

import pandas as pd
import numpy as np

X = pd.DataFrame([[0,1,2], [1,0,3], [2,3,0]])
n = 2

# 第一步:对每行的元素在列方向重复n次,生成3×6的DataFrame
col_expanded = X.apply(lambda row: np.repeat(row, n), axis=1).apply(pd.Series)
# 第二步:重复每行n次,生成6×6的最终DataFrame
result_df = col_expanded.loc[col_expanded.index.repeat(n)].reset_index(drop=True)

print(result_df)

代码解释:

  • X.apply(lambda row: np.repeat(row, n), axis=1):遍历每行,将行内每个元素重复n次,得到包含numpy数组的Series;
  • .apply(pd.Series):将数组转换为多列,得到3×6的DataFrame;
  • col_expanded.index.repeat(n):将原索引(0、1、2)各自重复n次,通过loc索引后实现行的重复;
  • reset_index(drop=True):重置索引,得到干净的结果。

两种方法都能得到你期望的结果,其中numpy的方法在处理大规模矩阵时效率会更高哦~

内容的提问来源于stack exchange,提问作者xc-2021

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 16:27:39