Индексирование Pandas Dataframe

У меня есть 2 кадра данных pandas с именами и оценками.

Первый кадр данных имеет вид:

df_score_1

        A   B   C   D   
    A   0   1   2   0   
    B   1   0   0   2   
    C   2   0   0   3   
    D   0   2   3   0   

куда

df_score_1.index

Индекс(['A', 'B', 'C', 'D'],dtype='объект')

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

df_score_2

A B 1
A C 1
A D 2
B C 5
B D 1

Цель состоит в том, чтобы преобразовать df_score_2 в форму df_score_1 с помощью команд pandas. Исходная форма взята из строки вывода networkx nx.to_pandas_dataframe(G).

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


person d..b    schedule 28.03.2018    source источник
comment
Я думаю, нужно pivot как df_score_2.pivot('col1','col2','col3')   -  person jezrael    schedule 28.03.2018


Ответы (3)


вы пытаетесь объединить кадры данных? или вы просто хотите, чтобы они имели одинаковый индекс? если вам нужен тот же индекс, используйте это:

l=df1.index.tolist()
df2.set_index(l, inplace=True)
person Lior T    schedule 28.03.2018
comment
Я попробовал это как предыдущее решение и получил ошибку KeyError: 'A' - person d..b; 28.03.2018

crosstab и переиндексация - лучшие решения, которые я нашел до сих пор:

  df = pd.crosstab(df[0], df[1], df[2], aggfunc=sum)

  idx = df.columns.union(df.index)
  df = df.reindex(index=idx, columns = idx)

На выходе получается матрица смежности со значениями NaN вместо зеркальных.

Вот ссылка на аналогичный вопрос

person d..b    schedule 28.03.2018

Я думаю, вам нужно,

 df_score_2.set_index(df_score_1.index,inplace=True)
person pyd    schedule 28.03.2018