2016-03-07 110 views
0

我在下面的格式有n个数据正以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大熊猫数据帧的格式如下:

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

...

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

+0

Wh在这里是'3-D'? – Zero

+0

分隔符是逗号。 –

+0

我的意思是3维。两列用于索引,一列用于值。 –

回答

0

使用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']

替换 ' - ' 与 '原产地',你可以使用dataframe.rename(columns={...})

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

谢谢约翰。它非常整齐。我不知道熔体的功能。 –