Создать матрицу путем группировки - Python - PullRequest
0 голосов
/ 16 июня 2020

Я работаю с очень большим набором данных и пытаюсь разработать матрицу для использования в визуализации, но у меня возникают проблемы с подсчетом взаимосвязей. Мои данные структурированы следующим образом:

| Project       | University |
|---------------|------------|
| Project One   | UniA       |
| Project One   | UniB       |
| Project One   | UniC       |
| Project Two   | UniC       |
| Project Two   | UniA       |
| Project Two   | UniB       |
| Project Two   | UniD       |
| Project Three | UniE       |
| Project Four  | UniA       |
| Project Four  | UniD       |

И я пытаюсь создать такую ​​матрицу:

|      | UniA | UniB | UniC | UniD | UniE |
|------|------|------|------|------|------|
| UniA | 0    | 2    | 1    | 2    | 0    |
| UniB | 2    | 0    | 2    | 1    | 0    |
| UniC | 1    | 2    | 0    | 1    | 0    |
| UniD | 2    | 1    | 1    | 0    | 0    |
| UniE | 0    | 0    | 0    | 0    | 0    |

Если Uni не имеет отношения к любому другому Uni (Un iE например), я хотел бы проигнорировать его из моей последней матрицы.

Я застрял на этом - любая помощь будет оценена.

1 Ответ

4 голосов
/ 16 июня 2020

Давайте сделаем self-join и используем pd.crosstab с reindex:

#do a self-join and eliminate same row matches
dfm = df.merge(df, on='Project').query('University_x != University_y')

#get unique universities
lu = df['University'].unique()

#create a crosstab report and reindex to fill zeroes
pd.crosstab(dfm['University_x'], dfm['University_y'])\
  .reindex(index=lu, columns=lu, fill_value=0)

Вывод:

University_y  UniA  UniB  UniC  UniD  UniE
University_x                              
UniA             0     2     2     2     0
UniB             2     0     2     1     0
UniC             2     2     0     1     0
UniD             2     1     1     0     0
UniE             0     0     0     0     0

Не хочу видеть все нули строки / столбцы удалить reindex:

pd.crosstab(dfm['University_x'], dfm['University_y'])

Вывод:

University_y  UniA  UniB  UniC  UniD
University_x                        
UniA             0     2     2     2
UniB             2     0     2     1
UniC             2     2     0     1
UniD             2     1     1     0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...