Панды: сумма строк фрейма данных для заданных столбцов
у меня есть следующий фрейм данных:
In [1]:
import pandas as pd
df = pd.DataFrame({'a': [1,2,3], 'b': [2,3,4], 'c':['dd','ee','ff'], 'd':[5,9,1]})
df
Out [1]:
a b c d
0 1 2 dd 5
1 2 3 ee 9
2 3 4 ff 1
Я хотел бы добавить столбец 'e'
который является суммой столбца 'a'
,'b'
и 'd'
.
идя по форумам, я думал, что-то вроде этого будет работать:
df['e'] = df[['a','b','d']].map(sum)
но нет!
Я хотел бы реализовать операцию получения списка столбцов ['a','b','d']
и df
в качестве входных данных.
4 ответа:
можно просто
sum
и установить paramaxis=1
чтобы суммировать строки, это не будет игнорировать ни одного числового столбца:In [91]: df = pd.DataFrame({'a': [1,2,3], 'b': [2,3,4], 'c':['dd','ee','ff'], 'd':[5,9,1]}) df['e'] = df.sum(axis=1) df Out[91]: a b c d e 0 1 2 dd 5 8 1 2 3 ee 9 14 2 3 4 ff 1 8
если вы хотите просто сумма определенных столбцов, то вы можете создать список столбцов и удалить те, которые вас не интересуют:
In [98]: col_list= list(df) col_list.remove('d') col_list Out[98]: ['a', 'b', 'c'] In [99]: df['e'] = df[col_list].sum(axis=1) df Out[99]: a b c d e 0 1 2 dd 5 3 1 2 3 ee 9 5 2 3 4 ff 1 7
Если у вас есть несколько столбцов, в сумме, вы можете написать:
df['e'] = df['a'] + df['b'] + df['d']
Это создает новый столбец
e
со значениями:a b c d e 0 1 2 dd 5 8 1 2 3 ee 9 14 2 3 4 ff 1 8
для более длинных списков столбцов предпочтителен ответ EdChum.
это более простой способ с помощью iloc выбрать, какие столбцы суммировать:
df['f']=df.iloc[:,0:2].sum(axis=1) df['g']=df.iloc[:,[0,1]].sum(axis=1) df['h']=df.iloc[:,[0,3]].sum(axis=1)
выдает:
a b c d e f g h 0 1 2 dd 5 8 3 3 6 1 2 3 ee 9 14 5 5 11 2 3 4 ff 1 8 7 7 4
Я не могу найти способ объединить диапазон и конкретные столбцы, которые работают, например, что-то вроде:
df['i']=df.iloc[:,[[0:2],3]].sum(axis=1) df['i']=df.iloc[:,[0:2,3]].sum(axis=1)