Как добавить значения под диагональю массива dataframe в больший, основанный на именах строк / столбцов? - PullRequest
0 голосов
/ 23 февраля 2019

Я хочу построить корреляционную матрицу всех авторов серии статей.

Сначала я построю корреляционную матрицу всех авторов для всех авторов, инициализированных нулями, и представлю их с помощью блока данных pandas.

Затем я получу список авторов первой статьи и построю меньший информационный кадр, инициализированный равным единице.

Мне, наконец, нужно будет сложить те, которые находятся под диагональю последнего меньшего информационного кадра, в большуюone.

После того, как я повторю это для всех статей, конечным результатом будет то, сколько раз каждый автор опубликовал вместе с каждым соавтором.

Я хотел бы избежать явных итераций и использовать панд иМаксимально возможное количество операций:

Вот рабочий код, приводящий к моему вопросу:

import pandas as pd
import numpy as np
all_authors = ["a","b","c","d","e","f","g"]

#create a numpy array initialized to all zeros with a side length of all_authors
authors_num = len(all_authors)
corr_matrix = np.zeros((authors_num,authors_num),dtype=np.int8)
# create a pandas dataframe using the corr_matrix and add the authors names as indexes and column names
corr_df = pd.DataFrame(data=corr_matrix,    # data
                   index=all_authors,       # row names
                   columns=all_authors)     # column names

article_1_authors = ["a","b","d"]
#create a numpy array initialized to all ones with a side length of the article authors
authors_num = len(article_1_authors)
corr_matrix = np.ones((authors_num,authors_num),dtype=np.int8)
# create a pandas dataframe using the corr_matrix and add the authors names as indexes and column names
auth_df = pd.DataFrame(data=corr_matrix,        # data
                   index=article_1_authors,     # row names
                   columns=article_1_authors)   # column names

Так что из приведенного выше кадра данных мне нужно будет использовать только значения ab ad и bd исуммируйте их в corr_df

Как я могу использовать операторы pandas / numpy, избегая циклов и других итераций, если possible?Заранее спасибо

1 Ответ

0 голосов
/ 25 февраля 2019

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

for coauthors in author_lists:
    # build all pairwise combinations of article's authors with no repetitions
    new_coauthorship = list(itertools.combinations(coauthors, 2))
    # increment cells in the corr_df for each coauthor pair in the article
   for cell in new_coauthorship:
       corr_df.loc[cell[0],cell[1]] += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...