首页 > 解决方案 > 如何对每个单元格包含列表的 pandas df 行求和?

问题描述

我试图将我的df的行总结如下,假设我有下面的df(一行中的每个单元格都包含一个相同大小的向量/列表!)在真正的问题中,我有大量的列并且它可以变化。但我确实有一个包含这些列名称的列表。

df = pd.DataFrame([
    [[1,2,3],[1,2,3],[1,2,3]],
    [[1,1,1],[1,1,1],[1,1,1]],
    [[2,2,2],[2,2,2],[2,2,2]]
    ], columns=['a','b','c'])

我正在尝试创建一个新列,它将包含每一行中所有向量的总和——就像 np.array 一样!结果得到以下向量:

[3,6,9]
[3,3,3]
[6,6,6]

不像.sum (axis=1) 那样..

[1,2,3,1,2,3,1,2,3]
[1,1,1,1,1,1,1,1,1]
[2,2,2,2,2,2,2,2,2]

谁能想到一个主意,在此先感谢:)

标签: pandaslistaggregation

解决方案


如果相同长度的列表创建 numpy 数组并求和以提高性能:

df['Sum'] = np.array(df.to_numpy().tolist()).sum(axis=1).tolist()
print (df)
           a          b          c        Sum
0  [1, 2, 3]  [1, 2, 3]  [1, 2, 3]  [3, 6, 9]
1  [1, 1, 1]  [1, 1, 1]  [1, 1, 1]  [3, 3, 3]
2  [2, 2, 2]  [2, 2, 2]  [2, 2, 2]  [6, 6, 6]

推荐阅读