Панды простые попарные вхождения - PullRequest
0 голосов
/ 04 июня 2018

В пандах есть функция corr для создания таблицы с коэффициентами взаимной корреляции при наличии разреженных данных.Но как рассчитать количество взаимных вхождений в данных вместо коэффициента корреляции?

т.е.

A = [NaN, NaN, 3]

B = [NaN, NaN, 8]

F(A,B) = 1

A = [1, NaN, NaN]

B = [NaN, NaN, 8]

F(A,B) = 0

Мне нужно pandas.DataFrame([A,B]).<function>() -> матрица вхождений

Ответы [ 3 ]

0 голосов
/ 04 июня 2018

Я использую numpy

sum(np.sum(~np.isnan(np.array([A,B])),0)==2)
Out[335]: 1

Для вас второй случай

sum(np.sum(~np.isnan(np.array([A,B])),0)==2)
Out[337]: 0
0 голосов
/ 04 июня 2018

С пандами

(df.A.notnull() & df.B.notnull()).sum()

Или

df.notnull().all(axis=1).sum()
0 голосов
/ 04 июня 2018

В пандах вы можете использовать dropna: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html

Вы можете сделать что-то вроде

co_occur = df.dropna(how = "any")
the_count = co_occur.shape[0] # number of remaining rows

Это отбросит все строки, где есть какой-либо NaN (тем самым оставив вастолько со строками, содержащими значения для каждой переменной), а затем подсчитайте количество оставшихся строк.

В качестве альтернативы вы можете сделать это со списками (как в коде выше), предполагая, что списки имеют одинаковую длину:

A = [NaN, NaN, 3]
B = [NaN, NaN, 8]

co_occur = len( [i for i in range(len(A)) if A[i] and B[i]] )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...