蒙上pandas DataFram下三角部分的口罩

2024-04-24 13:05:15 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我正在生成的数据帧输出,是一个5×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     

Tags: 数据truedfnan建议drop平均值duplicates
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

检查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

相关问题 更多 >