python 在数据框中设置对角线值

kpbwa7wx  于 2022-12-17  发布在  Python
关注(0)|答案(1)|浏览(148)

类似的问题已经有人问过了,但我还是想不出解决办法。
我有这样一个形状的PandasDataframe:
我想把它变成这样的:
我试过np.fill_diagonal(df.values,1),但是没有用。

hivapdat

hivapdat1#

假设第一列确实是列,并且您希望忽略它。
使用numpy

n_ignore = 1
a = df.to_numpy()
idx = np.arange(a.shape[0])
col = np.arange(a.shape[0])%(a.shape[1]-n_ignore)+n_ignore
a[idx, col] = 1

df2 = pd.DataFrame(a, index=df.index, columns=df.columns)

如果您更希望每组使用fill_diagonal

def fill_diag(g):
    a = g.to_numpy()
    np.fill_diagonal(a, 1)
    return pd.DataFrame(a, index=g.index, columns=g.columns)
    
(df.set_index(0)
   .groupby(level=0, group_keys=False).apply(fill_diag)
   .reset_index()
)

输出:

0  1  2  3  4
0  1  1  0  0  0
1  1  0  1  0  0
2  1  0  0  1  0
3  1  0  0  0  1
4 -1  1  0  0  0
5 -1  0  1  0  0
6 -1  0  0  1  0
7 -1  0  0  0  1

相关问题