print(df.columns[np.argsort(-df.values, axis=1)[:, :2]])
Index([['Zebra', 'Dog'], ['Cat', 'Zebra'], ['Cat', 'Dog']], dtype='object')
print(pd.DataFrame(df.columns[np.argsort(-df.values, axis=1)[:, :2]], index
    =df.index, columns=['first', 'second']))
Python Pandas, как найти верхнюю строку, которая встречается одновременно?