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

如何将指定结构的DataFrame转换为3×3数组?

将长格式DataFrame转换为3×3数组

我有如下结构的DataFrame:

ijelement
001
012
023
104
115
126
207
218
229

请问如何将其转换为如下的3×3数组?

123
456
789

解决方案

方法1:使用pivot方法

通过pandas的pivot函数,直接将i作为行索引、j作为列索引,映射到element的值,再转换为数组:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'i': [0,0,0,1,1,1,2,2,2],
    'j': [0,1,2,0,1,2,0,1,2],
    'element': [1,2,3,4,5,6,7,8,9]
})

# 转换为宽格式DataFrame
wide_df = df.pivot(index='i', columns='j', values='element')
# 转为numpy数组
result_array = wide_df.to_numpy()
print(result_array)

输出结果:

[[1 2 3]
 [4 5 6]
 [7 8 9]]

方法2:set_index + unstack组合

先设置i和j为双索引,再将j展开为列:

wide_df = df.set_index(['i', 'j'])['element'].unstack('j')
result_array = wide_df.to_numpy()

方法3:直接重塑数组(适用于已排序数据)

如果你的DataFrame已经按i升序、每个i下的j也按升序排列(如示例数据),可以直接提取element列的值并重塑形状:

result_array = df['element'].values.reshape(3, 3)

这种方法最简洁,但依赖数据的排列顺序,必须保证是行优先的顺序。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:25:31