df.apply(lambda x: x == x.max(), axis=1).astype(int)
должен это сделать.Это работает, проверяя, является ли значение максимальным для этого столбца, и затем приводя к целочисленному (True -> 1, False -> 0)
Вместо apply
-извлечения лямбда-строки, онотакже возможно транспонировать фрейм данных и сравнить с max
, а затем транспонировать обратно
(df.T == df.T.max()).T.astype(int)
И, наконец, очень быстрое решение на основе numpy:
pd.DataFrame((df.T.values == np.amax(df.values, 1)).T*1, columns = df.columns)
Вывод во всехслучаи:
A B C
0 0 1 0
1 1 0 0
2 1 0 0
3 1 0 0
4 0 0 1