Pandas Корреляция - Как использовать df.corr (), игнорируя 0 в обоих столбцах - PullRequest
0 голосов
/ 12 июля 2020

Как я могу использовать df.corr(), игнорируя все случаи, когда у меня 0 в обоих столбцах? У меня есть данные с более чем двумя столбцами , и я хочу знать все корреляции, игнорируя все (0,0).

#dataframe without zeros for both columns
df = pd.Dataframe([(.2, .3), (.1, .2), (.3, .6), (.6, .9), 
    (.5, .0), (.0, .5)], columns = ['dogs', 'cats'])
ρ = corr(dogs,cats) = 0.2482

#dataframe with lots of zeros for both columns
df = pd.Dataframe([(.2, .3), (.1, .2), (.3, .6), (.6, .9), 
    (.5, .0), (.0, .5), (.0, .0), (.0, .0), (.0, .0), (.0, .0)],
    columns = ['dogs', 'cats'])
ρ = corr(dogs,cats) = 0.5743

#dataframe with np.NaN instead of every zero
df = pd.Dataframe([(.2, .3), (.1, .2), (.3, .6), (.6, .9), 
    (.5, .0), (.0, .5), (.0, .0), (.0, .0), (.0, .0), (.0, .0)],
    columns = ['dogs', 'cats'])
df = df.replace(0, np.NaN)
ρ = corr(dogs,cats) = 0.9759

1 Ответ

0 голосов
/ 12 июля 2020
df.apply(lambda row: False if np.sum(row) == 0 else True, axis=1)

Приведенный выше код сгенерирует серию с True и False, где False произошло, когда все столбцы являются нулями.

Итак, вам просто нужно использовать маску для отфильтруйте свой фрейм данных.

df = df[df.apply(lambda row: False if np.sum(row) == 0 else True, axis=1)]
df.corr()
...