gpt4 book ai didi

python pandas聚合非数字类型

转载 作者:太空宇宙 更新时间:2023-11-03 18:41:56 25 4
gpt4 key购买 nike

我遇到以下问题,我设法在某些列上创建带有对象数据类型的数据框。特别是,这些将是 2d numpy 数组,但它们可以是任何非数字类型。现在我想旋转我的数据框。有没有办法传递我选择的适用于这些对象的聚合函数?我似乎无法做到这一点,并且收到错误:

GroupByError:没有要聚合的数字类型

例如,假设我有这个虚拟数据框:

date foo  bar               mat
1 a x [[1, 2], [3, 4]]
1 b x [[1, 2], [3, 4]]
1 a y [[1, 2], [3, 4]]
1 b y [[1, 2], [3, 4]]
2 a x [[4, 5], [6, 7]]
2 b x [[4, 5], [6, 7]]
2 a y [[4, 5], [6, 7]]
2 b y [[4, 5], [6, 7]]

我想要一个以下类型的新数据框:

dd.pivot_table(values=['mat'], rows=['date'], cols=['foo'], aggfunc= ??)

其中我的二维数组将是“foo”列中具有相同值的数组的逐元素总和。我怎样才能做到这一点?如果不可能,是否可以选择具有相同“foo”的数组列表中第一次出现的“mat”元素?谢谢

添加了所需的输出:

date    a               b           
1 [[2, 4], [6, 8]] [[8, 10], [12, 14]]
2 [[2, 4], [6, 8]] [[8, 10], [12, 14]]

最佳答案

您可以先分组,然后旋转:

>>> grouped = df.groupby(('foo', 'date'))
>>> g = grouped['mat'].apply(lambda x: np.array(map(np.array, x.values)).T.sum(axis=2).T).reset_index()
>>> g
foo date 0
0 a 1 [[2, 4], [6, 8]]
1 a 2 [[8, 10], [12, 14]]
2 b 1 [[2, 4], [6, 8]]
3 b 2 [[8, 10], [12, 14]]
>>> g.pivot(columns='foo', values=0, index='date').reset_index()
foo date a b
0 1 [[2, 4], [6, 8]] [[2, 4], [6, 8]]
1 2 [[8, 10], [12, 14]] [[8, 10], [12, 14]]

为了按元素求和,我在 axis=2 上使用了 numpy sum(预先将列表转换为 np.array)。另外,似乎你的输出有点不正确 - 它应该是:

date    a               b           
1 [[2, 4], [6, 8]] [[8, 10], [12, 14]]
2 [[2, 4], [6, 8]] [[8, 10], [12, 14]]

关于python pandas聚合非数字类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20345932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com