Вычислить сумму строк в новом столбце Pandas - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть следующий DataFrame, где длина столбца может сильно увеличиться. Я хочу создать новый столбец на основе суммы каждой строки

|---------------------|------------------|------------------|------------------|
|        A            |         B        |         C        |      Total       |
|---------------------|------------------|------------------|------------------|
|        x            |         34       |         8        |        42        |
|---------------------|------------------|------------------|------------------|
|        y            |         43       |        12        |        55        |
|---------------------|------------------|------------------|------------------|
|        z            |         6        |         321      |        327       |
|---------------------|------------------|------------------|------------------|

Я знаю, что могу легко сделать: df['Total'] = df['B'] + df['C'] Однако я ищу лучшую технику, так как длина моего столбца может быть намного больше важно

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

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-кратное ускорение для вас.

1 голос
/ 02 апреля 2020

Вы можете использовать apply в строке следующим образом:

df['Total'] = df.apply(np.sum, axis=1)

Если вы хотите перейти к первому столбцу, вы можете использовать .lo c:

df['Total'] = df.loc[:, 1:].apply(np.sum, axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...