最大値が複数ある場合は一番左にあるものを最大とみなすということで良ければ、以下でできます。
python
1df['D'] = df.set_axis([1, 2, 3], axis=1).idxmax(axis=1)
実行例
python
1>>> import pandas as pd
2>>> import random
3>>> df = pd.DataFrame([[random.randint(0,10) for i in range(3)] for j in range(5)], columns=list('ABC'))
4>>>
5>>> print(df)
6 A B C
70 9 4 6
81 8 6 2
92 2 8 2
103 8 1 8
114 4 1 6
12>>> df['D'] = df.set_axis([1, 2, 3], axis=1).idxmax(axis=1)
13>>> print(df)
14 A B C D
150 9 4 6 1
161 8 6 2 1
172 2 8 2 2
183 8 1 8 1
194 4 1 6 3
参考
pandasで最大値・最小値の行名・列名を取得するidxmax, idxmin