Маска нижней триангулярной части панд DataFrame - PullRequest
0 голосов
/ 05 января 2019

Это вывод данных, который я генерирую, это корреляционная матрица 5 x 5.

     A         B          C          D          E
A    1.00000  -0.277360   0.653920  -0.479600   0.513890
B   -0.27736   1.000000  -0.790648   0.885801  -0.482763
C    0.65392  -0.790648   1.000000  -0.876451   0.672148
D   -0.47960   0.885801  -0.876451   1.000000  -0.756182
E    0.51389  -0.482763   0.672148  -0.756182   1.000000

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

df.drop_duplicates(inplace=True)

Однако он возвращает df без изменений, что, как я полагаю, связано с тем, что drop_duplicates() удалит строки, но не заменит отдельные ячейки на NaN.

Есть предложения о том, как этого добиться? (желаемый результат ниже)

Обратите внимание, что Мне также нужно было бы специально удалить корреляции == 1 , так как они не нужны.

     A         B          C          D          E
A    NaN      -0.277360   0.653920  -0.479600   0.513890
B    NaN       NaN       -0.790648   0.885801  -0.482763
C    NaN       NaN        NaN       -0.876451   0.672148
D    NaN       NaN        NaN        NaN       -0.756182
E    NaN       NaN        NaN        NaN        NaN     

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Эффективная маскировка с np.indices:

i, j = np.indices(df.shape)
df.values[~(i < j)] = np.nan

df
    A        B         C         D         E
A NaN -0.27736  0.653920 -0.479600  0.513890
B NaN      NaN -0.790648  0.885801 -0.482763
C NaN      NaN       NaN -0.876451  0.672148
D NaN      NaN       NaN       NaN -0.756182
E NaN      NaN       NaN       NaN       NaN

np.nanmean(df.values)
# -0.09372449999999999
0 голосов
/ 05 января 2019

Проверьте с tril_indices

df.values[np.tril_indices(len(df))]=np.nan
df
    A        B         C         D         E
A NaN -0.27736  0.653920 -0.479600  0.513890
B NaN      NaN -0.790648  0.885801 -0.482763
C NaN      NaN       NaN -0.876451  0.672148
D NaN      NaN       NaN       NaN -0.756182
E NaN      NaN       NaN       NaN       NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...