2016-03-07 109 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

謝謝約翰。它非常整齊。我不知道熔體的功能。 –