将 nxn 矩阵转换为 pandas 数据帧
Convert an nxn matrix to a pandas dataframe
我在 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 循环来读取每一行并附加它的转置,但必须有更简单的方法。任何帮助将不胜感激。
假设您的数据框看起来像
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'})
我在 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 循环来读取每一行并附加它的转置,但必须有更简单的方法。任何帮助将不胜感激。
假设您的数据框看起来像
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'})