我在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循环来读取每一行并附加它的转置,但必须有一个更简单的方法。任何帮助将不胜感激。
答案 0 :(得分:1)
假设您的数据框看起来像
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'})