如何在numpy中将两个列表的列表连接起来?

3
数据框是:
            date             ids_x               ids_y
0     2011-04-23  [0, 1, 2, 10, 11, 12, 13]       []
1     2011-04-24  [0, 1, 2, 10, 11, 12, 13]       [12,4]
2     2011-04-25  [0, 1, 2, 3, 4, 1, 12]          []
3     2011-04-26  [0, 1, 2, 3, 4, 5, 6]           [4,5,6]

方便但较慢的方法是使用:

df['ids'] = df['ids_x'] + df['ids_y']

我希望通过使用numpy实现这种方法,但目前速度非常慢,需要4秒。因为Pandas使用numpy,所以我认为应该在不使用Pandas的情况下使用numpy以减少开销。

我使用了column_stack,但输出结果如下:

a = np.array([[1,2,3],[4,5,6]])

b = np.array([[9,8,7],[6,5,4,6,7,8]])

np.column_stack((a,b))

[out]: array([[1, 2, 3, [9, 8, 7]], [4, 5, 6, [6, 5, 4, 6, 7, 8]]], dtype=object)

concatenate? - Sven
这可能不是很快,但是 [np.append(x,y) for x, y in zip(a, b)] 行得通吗? - Zero
@JohnGalt我正在寻找一种快速的方法,因为df['something'] + df['another_thing']可以解决我的问题,而且不会增加代码复杂度。 - Alireza
@Sven,“concatenate”不是解决方案,因为它合并的方式不是我想要的。我想要类似于“column_stack”的东西。 - Alireza
1个回答

1
< p > np.column_stack存在的问题是,在b中您没有等长的列(因此dtypeobject)。< /p > < p > 您可以使用np.concatenate(或如评论中@John Galt所说的np.append)来解决这个问题;例如:< /p >
In [43]: [np.concatenate((i,j)) for i,j in zip(a,b)])
Out[43]: [array([1, 2, 3, 9, 8, 7]), array([4, 5, 6, 6, 5, 4, 6, 7, 8])]

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