我有一个熊猫数据框,如下所示:
X Y
71455 [334.0, 319.0, 298.0, 323.0]
71455 [3.0, 8.0, 13.0, 10.0]
57674 [54.0, 114.0, 124.0, 103.0]
我想执行一个聚合groupby
,该聚合将存储在Y列中的列表逐个元素地添加。我尝试过的代码:
df.groupby('X').agg({'Y' : sum})
结果如下:
Y
X
71455 [334.0, 319.0, 298.0, 323.0, 75.0, 55.0, ...
因此,它已将列表串联在一起,而不是按元素进行汇总。但是,预期结果是:
X Y
71455 [337.0, 327.0, 311.0, 333.0]
57674 [54.0, 114.0, 124.0, 103.0]
我尝试了不同的方法,但是无法按预期工作。
答案 0 :(得分:5)
Pandas不适用于一系列列表。这种尝试迫使熊猫使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="selectedListTable"></table>
dtype系列,该系列不能以矢量化的方式进行操作。相反,您可以在汇总之前将一系列列表分为数字系列:
object
答案 1 :(得分:4)
如果将列表转换为numpy
个数组,sum
将起作用:
df['Y'] = df['Y'].apply(np.array)
df.groupby('X')['Y'].apply(np.sum)
#X
#57674 [54.0, 114.0, 124.0, 103.0]
#71455 [337.0, 327.0, 311.0, 333.0]
#Name: Y, dtype: object
答案 2 :(得分:4)
可以在分组的数据帧上使用apply
来进行逐元素加法:
df.groupby('X')['Y'].apply(lambda x: [sum(y) for y in zip(*x)])
这将产生一个熊猫系列对象:
X
57674 [54.0, 114.0, 124.0, 103.0]
71455 [337.0, 327.0, 311.0, 333.0]