I have this CSV file, with adjacency matrix:
JavaScript
x
8
1
| | Happy | Love | Fat | Ugly | Trust |
2
|-------|---|---|---|---|---|
3
| Happy | 0 | 2 | 1 | 0 | 1 |
4
| Love | 2 | 0 | 1 | 0 | 1 |
5
| Fat | 1 | 1 | 0 | 0 | 0 |
6
| Ugly | 0 | 0 | 0 | 0 | 1 |
7
| Trust | 1 | 1 | 0 | 1 | 0 |
8
I want to transform to a new csv file, with the values of sorce, target, and value. For example:
JavaScript
1
6
1
|Source | Target | Value
2
|-------|---|---|
3
| Happy | Love | 2 |
4
| Happy | Fat | 1 |
5
| Happy | Ugly | 0 |
6
Thanks!
Advertisement
Answer
If you replace the zeros with nan, you can use stack to achieve this.
JavaScript
1
13
13
1
import pandas as pd
2
import numpy as np
3
4
5
df = pd.DataFrame({'Happy': {'Happy': 0, 'Love': 2, 'Fat': 1, 'Ugly': 0, 'Trust': 1},
6
'Love': {'Happy': 2, 'Love': 0, 'Fat': 1, 'Ugly': 0, 'Trust': 1},
7
'Fat': {'Happy': 1, 'Love': 1, 'Fat': 0, 'Ugly': 0, 'Trust': 0},
8
'Ugly': {'Happy': 0, 'Love': 0, 'Fat': 0, 'Ugly': 0, 'Trust': 1},
9
'Trust': {'Happy': 1, 'Love': 1, 'Fat': 0, 'Ugly': 1, 'Trust': 0}})
10
11
df = df.replace(0,np.nan).stack().reset_index()
12
df.columns = ['Source','Target','Value']
13
Output
JavaScript
1
14
14
1
Source Target Value
2
0 Happy Love 2.0
3
1 Happy Fat 1.0
4
2 Happy Trust 1.0
5
3 Love Happy 2.0
6
4 Love Fat 1.0
7
5 Love Trust 1.0
8
6 Fat Happy 1.0
9
7 Fat Love 1.0
10
8 Ugly Trust 1.0
11
9 Trust Happy 1.0
12
10 Trust Love 1.0
13
11 Trust Ugly 1.0
14