Pandas - Сложить все значения в списке ячейки

Рейтинг: 1Ответов: 2Опубликовано: 22.05.2023

Есть датафрейм такого вида:

x y z
[1.0, 2.0] [5.0, 2.0] [7.0, 1.0]
[2.0, 2.0] [1.0, 2.0] [7.0, 1.0]

Нужно сложить списки в каждой ячейке, т.е. превратить в такой:

x y z
3.0 7.0 8.0
4.0 3.0 8.0

Как сделать это максимально просто?

Ответы

▲ 2Принят

Для этого можно воспользоваться методом .apply() для каждого столбца, этот способ самый простой и понятный:

df['x'] = df['x'].apply(lambda x: sum(x))
df['y'] = df['y'].apply(lambda x: sum(x))
df['z'] = df['z'].apply(lambda x: sum(x))

Учтите, что если в столбцах будут элементы не в виде списка, то будет выдавать ошибку. Если столбцов много и вручную делать для каждого столбца долго, то вот вариант, который просуммирует значения во всех столбцах:

cols = df.columns
for col in cols:
    df[col] = df[col].apply(lambda x: sum(x))

df
▲ 2

просто примените applymap:

import pandas as pd
df = pd.DataFrame({"x":[[1.0, 2.0],[2.0, 2.0]], "y":[[5.0, 2.0],[1.0, 2.0]], "z":[[7.0, 1.0], [7.0, 1.0]]})
df = df.applymap(sum)
print(df)
     x    y    z
0  3.0  7.0  8.0
1  4.0  3.0  8.0