如何用Python从DataFrame列生成状态转移频率矩阵?
从状态转移频率DataFrame生成带轴标签的矩阵
完全可以通过pandas的字符串拆分和数据重塑功能实现,步骤如下:
拆分转移状态列
把Transition列按" to "拆分,得到起始状态(From)和目标状态(To)两列,这是构建矩阵行/列标签的基础。重塑为矩阵格式
用pivot方法将数据转换为行是起始状态、列是目标状态、值为频率的表格结构,自动带上轴标签。提取数值矩阵(可选)
如果需要纯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
相关产品推荐
相关产品推荐

