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

如何使用pandas将DataFrame转换为指定索引的矩阵?(新手求助)

用Pandas将DataFrame转换为指定矩阵的方法

嘿,作为Pandas新手,这个需求其实挺典型的,咱们用Pandas自带的透视表功能就能轻松实现,最后还能转成适合数据分析的矩阵格式。我给你一步步拆解:

首先,先把你的示例数据构造出来(方便你复现测试):

import pandas as pd

# 构造你提供的DataFrame
df = pd.DataFrame({
    'Column1': ['abcd1234', '8yghc123'],
    'Column2': ['1234abcd', '09mjko]['],
    'Number': [7, 5]
})

第一步:生成透视表

我们可以用pivot方法,直接把Column1作为行索引、Column2作为列名,Number作为对应的值:

# 创建透视表,行=Column1唯一值,列=Column2唯一值,值=Number
pivot_df = df.pivot(index='Column1', columns='Column2', values='Number')

这时候pivot_df的结构就是你要的“矩阵型”DataFrame了:

Column11234abcd09mjko][
abcd12347NaN
8yghc123NaN5

如果你的数据里存在没有对应关系的行/列组合,会自动填充NaN,要是需要把这些缺失值换成0(比如后续数据分析需要),可以加个fillna:

# 填充缺失值为0
pivot_df_filled = pivot_df.fillna(0)

第二步:转换为numpy矩阵

要得到真正的矩阵Mᵢⱼ,直接把透视表转成numpy数组就行,这一步非常适合后续的数据分析操作:

import numpy as np

# 转换为numpy矩阵
M = pivot_df_filled.to_numpy()

打印M会得到:

array([[7., 0.],
       [0., 5.]])

完全符合你的要求:abcd1234对应i=0,1234abcd对应j=0,所以M[0,0]=7;8yghc123对应i=1,09mjko][对应j=1,所以M[1,1]=5。

特殊情况处理:重复组合

如果你的数据里存在同一个Column1+Column2对应多个Number的情况,pivot会报错,这时候改用pivot_table并指定聚合函数就行,比如求和、取均值:

# 处理重复组合,这里用求和作为聚合方式
pivot_table_df = df.pivot_table(
    index='Column1',
    columns='Column2',
    values='Number',
    aggfunc='sum'  # 可以换成'mean'等其他聚合函数
).fillna(0)
M = pivot_table_df.to_numpy()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:55:36