Суммировать список значений в pandas df

#python #pandas #sum

#питон #панды #сумма

Вопрос:

Я уверен, что это может быть где-то внутри SO , но, похоже, я не могу его найти. Я пытаюсь sum использовать ценности , выраженные внутри lists , из a pandas df . Пример

Я могу добиться этого, используя следующее из array :

 array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

array = [sum(a) for a in zip(*array)]
 

Но когда значения размещаются внутри df , я не могу заставить его работать. Вот моя попытка:

 d = ({
    'Val' : [[1,2,3],[4,5,6],[7,8,9]],   
     })

df = pd.DataFrame(data = d)

df = [sum(a) for a in zip(df['Val'])]

print(df)

df = [sum(a) for a in zip(df['Val'])]

TypeError: unsupported operand type(s) for  : 'int' and 'list'
 

Комментарии:

1. Вы можете использовать лямбду для применения суммы к каждому списку, df[‘Val’].apply(лямбда x: сумма (x))

Ответ №1:

Чего вам не хватает, так это отправить это в список в сжатии списка. выполните следующие действия:

 d = ({
'Val' : [[1,2,3],[4,5,6],[7,8,9]],   
 })
df = pd.DataFrame(data = d)

df = [sum(a) for a in df['Val'].tolist()]
 

Выполнение понимания списка с фреймом данных происходит очень медленно.

Комментарии:

1. Первый список — [1, 2, 3] . Сумма равна 6. Приведенный выше метод также возвращает 6 в качестве первой суммы, что кажется мне правильным, в отличие от других методов в этом сообщении?

Ответ №2:

Вам не хватает оператора * star для распаковки:

 df = [sum(a) for a in zip(*df['Val'])]

print(df)
[12, 15, 18]
 

Теперь он передает списки, вот почему вы получаете эту ошибку:

 for a in zip(df['Val']):
    print(a)

print('n')

for a in zip(*df['Val']):  # <--- notice the *
    print(a)

# Output

([1, 2, 3],)
([4, 5, 6],)
([7, 8, 9],)


(1, 4, 7)
(2, 5, 8)
(3, 6, 9)
 

Комментарии:

1. Первый список — [1, 2, 3] . Сумма равна 6. Приведенный выше метод возвращает 12 в качестве первой суммы, что неверно?