慕容3067478
做到这一点的一种不太雅致的方法是:(df.T.max() == df.T).T.astype(int)在这里,我们计算按行的最大值,然后将其与值进行比较(将其设置为True/ False),然后将其转换为ints。这将产生:>>> (df.T.max() == df.T).T.astype(int) a b c0 0 1 01 0 0 12 1 0 0该.T是必要的,因为这将另有计算纵列最大。或就像@AChampion所说的那样,我们可以使用计算行的最大值,.max(axis=1)然后使用df.eq(..)来计算行的相等性。喜欢:>>> df.eq(df.max(axis=1), axis=0).astype(int) a b c0 0 1 01 0 0 12 1 0 0编辑:仅更新非零行例如,我们可以使用屏蔽来防止将这些值分配给零行。例如:fl = (df != 0).any(axis=1)df[fl] = df[fl].eq(df[fl].max(axis=1), axis=0).astype(int)例如:>>> df = pd.DataFrame([[3, 4, 1], [2, 1, 6], [7, 1, 6], [0, 0, 0]], columns=["a", "b", "c"])>>> fl = (df != 0).any(axis=1)>>> df[fl] = df[fl].eq(df[fl].max(axis=1), axis=0).astype(int)>>> df a b c0 0 1 01 0 0 12 1 0 03 0 0 0