类似的问题已经有人问过了,但我还是想不出解决办法。我有这样一个形状的PandasDataframe:我想把它变成这样的:我试过np.fill_diagonal(df.values,1),但是没有用。
np.fill_diagonal(df.values,1)
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:
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
1条答案
按热度按时间hivapdat1#
假设第一列确实是列,并且您希望忽略它。
使用numpy:
如果您更希望每组使用
fill_diagonal
:输出: