Сумма списка значений внутри панды df - PullRequest
0 голосов
/ 16 апреля 2019

Я уверен, что это может быть где-то в SO, но я не могу его найти.Я пытаюсь sum значения, выраженные в lists от 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'

Ответы [ 3 ]

1 голос
/ 16 апреля 2019

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

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 голос
/ 16 апреля 2019

Сначала преобразуйте в np.array.

df.Val = df.Val.apply(lambda x: np.array(x))

Затем вы можете использовать .sum

df.Val.sum()

array([12, 15, 18])
1 голос
/ 16 апреля 2019

Вам не хватает, чтобы отправить это списку в списке списков, выполните следующие действия:

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()]

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...