将nxn矩阵转换为pandas数据帧

时间:2016-03-07 18:35:39

标签: python pandas panel

我在csv中有以下格式的n×n数据

-   A   B   C   D
A   0   1   2   4
B   2   0   3   1
C   1   0   0   5
D   2   5   4   0
...

我想阅读它并按以下格式转换为3D pandas数据帧:

Origin Dest Distance
A      A    0
A      B    1
A      C    2

...

转换它的最佳方法是什么?在最坏的情况下,我会写一个for循环来读取每一行并附加它的转置,但必须有一个更简单的方法。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

使用pd.melt()

假设您的数据框看起来像

In [479]: df
Out[479]:
   -  A  B  C  D
0  A  0  1  2  4
1  B  2  0  3  1
2  C  1  0  0  5
3  D  2  5  4  0

In [480]: pd.melt(df, id_vars=['-'], value_vars=df.columns.values.tolist()[1:],
   .....:         var_name='Dest', value_name='Distance')
Out[480]:
    - Dest  Distance
0   A    A         0
1   B    A         2
2   C    A         1
3   D    A         2
4   A    B         1
5   B    B         0
6   C    B         0
7   D    B         5
8   A    C         2
9   B    C         3
10  C    C         0
11  D    C         4
12  A    D         4
13  B    D         1
14  C    D         5
15  D    D         0

其中df.columns.values.tolist()[1:]列为['A', 'B', 'C', 'D']

替换' - '使用' Origin',您可以使用dataframe.rename(columns={...})

pd.melt(df, id_vars=['-'], value_vars=df.columns.values.tolist()[1:],
        var_name='Dest', value_name='Distance').rename(columns={'-': 'Origin'})