将数据框中的上下三角值替换为零,或仅保留对角线值

Jyo*_*hsa 1 python pandas

我有以下DataFrame作为玩具示例:

a = [5,2,6,8]
b = [2,10,19,16]
c = [3,8,15,17]
d = [3,8,12,20]
df  = pd.DataFrame([a,b,c,d], columns = ['a','b','c','d'])
df
Run Code Online (Sandbox Code Playgroud)

我想创建一个df1仅保留对角元素并将新的上下三角值转换为零的新DataFrame 。

我的最终数据集应如下所示:

    a   b   c   d
0   5   0   0   0
1   0   10  0   0
2   0   0   15  0
3   0   0   0   20
Run Code Online (Sandbox Code Playgroud)

Dan*_*ejo 5

您可以使用numpy.diag

df = pd.DataFrame(data=np.diag(np.diag(df)), columns=df.columns)
print(df)
Run Code Online (Sandbox Code Playgroud)

输出量

   a   b   c   d
0  5   0   0   0
1  0  10   0   0
2  0   0  15   0
3  0   0   0  20
Run Code Online (Sandbox Code Playgroud)