apply
может быть мучительно медленным для фреймов данных с большим количеством строк. Избегайте этого, когда это возможно. Вот обходной путь.
cols_to_sum = [<columns to sum over>]
df['Total'] = df[cols_to_sum].sum(axis = 1)
Вот сравнение производительности двух методов:
df = pd.DataFrame({"a" : np.random.randn(100000),
"b": np.random.randn(100000),
"c": np.random.randn(100000),
"d": np.random.randn(100000),
"e": np.random.randn(100000)})
cols_to_sum = list('abcde')
%%time
result1 = df[cols_to_sum].apply(np.sum, axis = 1)
>> CPU times: user 7.88 s, sys: 39.7 ms, total: 7.92 s
>> Wall time: 7.89 s
%%time
result2 = df[cols_to_sum].sum(axis = 1)
>> CPU times: user 9.51 ms, sys: 0 ns, total: 9.51 ms
>> Wall time: 17.5 ms
print((result1 == result2).all())
>> True
Это ~ 400-кратное ускорение для вас.