Вычислить перекрытие между столбцами двух DataFrames как квадратную матрицу совместного использования - PullRequest
1 голос
/ 26 апреля 2020

Я ищу перекрытие между двумя кадрами данных, столбец за столбцом.

df1 = pd.DataFrame({'V1':['a', 'b', 'c'], 'V2':['d', 'e','f'],'V3':['g','h','i'})
df2 = pd.DataFrame({'X1':['e', 'b', 'd'], 'X2':['a', 'h','i'],'X3':['c','f','g'})

Logi c:

  • V1, X1 = 1 (потому что b встречается один раз в X1 происходит 0, c происходит 0)
  • V1, X2 = 1 (a происходит один раз в X2, et c)
  • V1, X3 = 1 (c встречается один раз в X3, et c.)
  • V2, X1 = 2 (d и e совместно встречаются)
  • V2, X2 = 0
  • V2, X3 = 1 (только f)
  • V3, X1 = 0
  • V3, X2 = 2 (h и i совместно происходят)
  • V3, X3 = 1 (г )

с одной строкой на V и X в качестве столбцов.

Ожидаемый результат:

    X1  X2  X3
V1   1   1   1
V2   2   0   1
V3   0   2   1

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

1 Ответ

2 голосов
/ 26 апреля 2020

Вы можете сделать это с помощью сравнения внешнего равенства с NumPy:

pd.DataFrame(np.equal.outer(df1, df2).sum(axis=(0, 2)), 
             index=df1.columns, 
             columns=df2.columns)

    X1  X2  X3
V1   1   1   1
V2   2   0   1
V3   0   2   1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...