这是我正在生成的数据帧输出,它是一个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
答案 0 :(得分:2)
使用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
答案 1 :(得分:2)
使用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