#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 в качестве первой суммы, что неверно?