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

如何用Pandas将1000×1000方阵转换为列形式矩阵?

解决方案:将方阵DataFrame转换为列形式矩阵

对于你的需求,最简洁高效的方法是使用Pandas的melt()函数(宽表转长表的专用工具),尤其适合处理1000×1000这类大型矩阵,性能远优于手动循环拼接。

针对你的示例代码的实现

import pandas as pd

# 原方阵数据
data = {'Zone': ['Z1', 'Z2', 'Z3'],
        'Z1': [10, 3, 1],
        'Z2': [2, 5, 1],
        'Z3': [1, 2, 5]}
df_square = pd.DataFrame(data)

# 转换为目标列形式矩阵
df_column = df_square.melt(
    id_vars='Zone',          # 保留作为"起点区域"的列
    var_name='Destination_zone',  # 把原列名转为"终点区域"
    value_name='Value'      # 把单元格值转为"数值"列
).rename(columns={'Zone': 'Origin_zone'})  # 重命名起点列

print(df_column)

运行后会直接输出你需要的三列结构:Origin_zone、Destination_zone、Value。

针对索引为区域名的方阵(可选场景)

如果你的大型方阵是把区域名设为索引(而非单独的Zone列),可以用stack()方法实现转换:

# 假设方阵以区域名为索引和列名
df_square = pd.DataFrame(
    [[10,3,1], [2,5,1], [1,2,5]],
    index=['Z1','Z2','Z3'],
    columns=['Z1','Z2','Z3']
)

# 转换
df_column = df_square.stack().reset_index()
df_column.columns = ['Origin_zone', 'Destination_zone', 'Value']

性能说明

melt()和stack()都是Pandas底层优化过的向量操作,处理1000×1000的矩阵时,能在极短时间内完成转换,不会出现性能瓶颈。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 06:22:13