如何用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
相关产品推荐
相关产品推荐

