将pandas的groupby值转换为numpy数组

3

我尝试了多种解决方案,但没有一种能够得到所需的输出。

我有一个数据框:

 tag    value
 'A'     3.7
 'A'     1.5
 'E'     9.7
 'E'     2.9
 'B'    -1.2
 'B'     0.8

我的期望输出是一个Numpy数组:

array([[3.7, 1.5],
      [9.7, 2.9],
      [-1.2, 0.8]])

我尝试使用numpy数组中的groupby和转换功能

df.groupby(['tag']).value.apply(np.array).values

但是我得到的输出结果是:
array([array([3.7, 1.5]), array([9.7, 2.9]), array([-1.2, 0.8]))], dtype=object)
2个回答

2

如果每组始终有相同数量的值,则可以创建嵌套列表并传递给np.array,对于相同顺序的组,还可以在DataFrame.groupby中添加sort=False参数:

arr = np.array(df.groupby(['tag'], sort=False).value.apply(list).tolist())
print (arr)
[[ 3.7  1.5]
 [ 9.7  2.9]
 [-1.2  0.8]]

@YashGhorpade - 有一个想法,如何将np.array更改为np.asarray - jezrael
尝试使用np.asarray仍然会产生array([array([])])的输出。底层数据结构非常棘手。 - Yash Ghorpade
@YashGhorpade - 是的,同意。也许最好提到我在pandas 1.0.5中测试过它,也许这也有所不同,但我不知道。 - jezrael
没问题,我会做for循环的。谢谢你的帮助。 - Yash Ghorpade
@FlorianBecker - 你试过问题中的数据了吗? - 每个组的长度都一样吗? - jezrael
显示剩余6条评论

-1
df.groupby('tag')['value'].agg(lambda x: x.tolist()).values

这不会创建numpy数组,而是一个包含列表的numpy数组。 - burny
OP 没有要求使用 numpy 数组,而是要求使用 numpy 数组。 - Stups
然而,OP 的预期输出不是包含列表的数组,而是一个二维数组(可以被视为多个数组的一个数组)。 - burny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接