当列包含需要添加的多维数组时进行分组依据

时间:2019-05-16 14:07:08

标签: python-3.x pandas numpy

我有一个熊猫数据框,其中包含二维向量作为列。我想对其中一列进行分组,然后将向量相加。

我尝试了groupby然后求和,如下面的代码所示,但是输出列是在向量上添加维,而不是在向量上添加维(类似于使用np.add的情况)。

import pandas as pd

data = pd.DataFrame({'label': ['A', 'B', 'A'], 'label2' : ['X', 'Y', 'Z'],
                     'output' :   [[[1,2,3,4],[5,6,7,8]] ,[[9,10,11,12],[13,14,15,16]],[[17,18,19,20],[21,22,23,24]]] })

data_grouped = data.groupby('label')['output'].sum()

我想对“标签”进行分组并汇总输出。给定输出是二维向量,我希望将向量相加而不合并。因此,我的期望是:

label A: output is [[18,20,22,24],[26,28,30,32]]
label B: output is [[9,10,11,12],[13,14,15,16]]

但是我得到了:

label A: [[1, 2, 3, 4], [5, 6, 7, 8], [17, 18, 19, 20],[21,22,23,24]]

label B: [[9, 10, 11, 12], [13, 14, 15, 16]]

1 个答案:

答案 0 :(得分:1)

解决方案

import pandas as pd
import numpy as np

data = pd.DataFrame({'label': ['A', 'B', 'A'], 'label2' : ['X', 'Y', 'Z'],
                     'output' :   [[[1,2,3,4],[5,6,7,8]] ,[[9,10,11,12],[13,14,15,16]],[[17,18,19,20],[21,22,23,24]]] })

data['output'] = data['output'].map(np.array)
data_grouped = data[['label', 'output']].groupby('label').sum()
print(data_group)

>>>                                      output
>>> label                                      
>>> A      [[18, 20, 22, 24], [26, 28, 30, 32]]
>>> B       [[9, 10, 11, 12], [13, 14, 15, 16]]

说明

您的output包含python列表。对2个列表的操作+将这些列表连接在一起:

print([1, 2] + [3, 4])
>>> [1, 2, 3, 4]

print([[1], [2]] + [[3], [4]])
>>> [[1], [2], [3], [4]]

data['output'].map(np.array)将2D列表转换为2D numpy数组。 numpy数组+操作(sum()使用)将两个数组中“相同位置”上的值相加。