如何将指定结构的DataFrame转换为3×3数组?
将长格式DataFrame转换为3×3数组
我有如下结构的DataFrame:
| i | j | element |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 2 |
| 0 | 2 | 3 |
| 1 | 0 | 4 |
| 1 | 1 | 5 |
| 1 | 2 | 6 |
| 2 | 0 | 7 |
| 2 | 1 | 8 |
| 2 | 2 | 9 |
请问如何将其转换为如下的3×3数组?
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |
解决方案
方法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
相关产品推荐
相关产品推荐

