Преобразование смежности матрицы к источнику, цели, значению в CSV-файле (python)

#python #python-3.x #csv #matrix

Вопрос:

У меня есть этот CSV-файл с матрицей смежности:

 |    | Happy | Love | Fat | Ugly | Trust | 
|-------|---|---|---|---|---|
| Happy | 0 | 2 | 1 | 0 | 1 |
| Love  | 2 | 0 | 1 | 0 | 1 |
| Fat   | 1 | 1 | 0 | 0 | 0 |
| Ugly  | 0 | 0 | 0 | 0 | 1 |
| Trust | 1 | 1 | 0 | 1 | 0 | 
 

Я хочу преобразовать в новый csv-файл со значениями sorce, target и value.
Например:

 |Source | Target | Value
|-------|---|---|
| Happy | Love | 2 |
| Happy  | Fat | 1 | 
| Happy   | Ugly | 0 | 
 

Спасибо!

Ответ №1:

Если вы замените нули на nan, вы можете использовать стек для достижения этой цели.

 import pandas as pd
import numpy as np


df = pd.DataFrame({'Happy': {'Happy': 0, 'Love': 2, 'Fat': 1, 'Ugly': 0, 'Trust': 1},
 'Love': {'Happy': 2, 'Love': 0, 'Fat': 1, 'Ugly': 0, 'Trust': 1},
 'Fat': {'Happy': 1, 'Love': 1, 'Fat': 0, 'Ugly': 0, 'Trust': 0},
 'Ugly': {'Happy': 0, 'Love': 0, 'Fat': 0, 'Ugly': 0, 'Trust': 1},
 'Trust': {'Happy': 1, 'Love': 1, 'Fat': 0, 'Ugly': 1, 'Trust': 0}})

df = df.replace(0,np.nan).stack().reset_index()
df.columns = ['Source','Target','Value']
 

Выход

    Source Target  Value
0   Happy   Love    2.0
1   Happy    Fat    1.0
2   Happy  Trust    1.0
3    Love  Happy    2.0
4    Love    Fat    1.0
5    Love  Trust    1.0
6     Fat  Happy    1.0
7     Fat   Love    1.0
8    Ugly  Trust    1.0
9   Trust  Happy    1.0
10  Trust   Love    1.0
11  Trust   Ugly    1.0