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

如何用Python从DataFrame列生成状态转移频率矩阵?

从状态转移频率DataFrame生成带轴标签的矩阵

完全可以通过pandas的字符串拆分和数据重塑功能实现,步骤如下:

  1. 拆分转移状态列
    把Transition列按" to "拆分,得到起始状态(From)和目标状态(To)两列,这是构建矩阵行/列标签的基础。

  2. 重塑为矩阵格式
    用pivot方法将数据转换为行是起始状态、列是目标状态、值为频率的表格结构,自动带上轴标签。

  3. 提取数值矩阵(可选)
    如果需要纯numpy数组形式的矩阵,可以从重塑后的DataFrame中提取数值部分。

完整代码示例

import pandas as pd

# 初始化数据
data = [['a to a', 20],['a to b', 10], ['a to c', 5],
        ['b to a', 7],['b to b', 30],['b to c', 15],
        ['c to a', 9],['c to b', 6],['c to c', 25]]
df = pd.DataFrame(data, columns=['Transition', 'Frequency'])

# 拆分转移列,得到From和To状态
df[['From', 'To']] = df['Transition'].str.split(' to ', expand=True)

# 重塑为转移矩阵(带标签)
transition_matrix = df.pivot(index='From', columns='To', values='Frequency')

# 查看带标签的矩阵
print("带轴标签的转移矩阵:")
print(transition_matrix)

# 提取纯数值numpy数组(如果需要)
matrix_array = transition_matrix.to_numpy()
print("\n纯数值矩阵数组:")
print(matrix_array)

输出效果

带轴标签的转移矩阵会输出:

To    a   b   c
From          
a    20  10   5
b     7  30  15
c     9   6  25

纯数值矩阵数组输出:

[[20 10  5]
 [ 7 30 15]
 [ 9  6 25]]

这样既生成了符合要求的3×3矩阵,也保留了a、b、c的轴标签,完全匹配你期望的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 11:06:48