merg的NumPy等价物

2024-10-02 08:28:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将一些东西从R转换到Python,我对高效地合并很感兴趣。我在NumPy中发现了一些关于concatenate的东西(使用NumPy进行操作,所以我想继续使用它),但是它并没有如预期的那样工作。在

取两个数据集

d1 = np.array([['1a2', '0'], ['2dd', '0'], ['z83', '1'], ['fz3', '0']])
^{pr2}$

以及

d2 = np.array([['1a2', '33.3', '22.2'], 
               ['43m', '66.6', '66.6'], 
               ['z83', '12.2', '22.1']])
ID     val1   val2
1a2    33.3   22.2
43m    66.6   66.6
z83    12.2   22.1

我想把这些合并在一起,结果是

d3

ID    Label    val1    val2
1a2   0        33.3    22.2
z83   1        12.2    22.1

因此,它标识出与ID列匹配的行,然后将这些行连接在一起。这在R中使用merge相对简单,但是在NumPy中它对我来说就不那么明显了。在

有没有一种方法可以在我所缺少的纽比(NumPy)中实现这一点?在


Tags: 数据numpyidnparraylabeld2d1
1条回答
网友
1楼 · 发布于 2024-10-02 08:28:34

这里有一个基于NumPy的使用掩蔽的解决方案-

def numpy_merge_bycol0(d1, d2):
    # Mask of matches in d1 against d2
    d1mask = np.isin(d1[:,0], d2[:,0])

    # Mask of matches in d2 against d1
    d2mask = np.isin(d2[:,0], d1[:,0])

    # Mask respective arrays and concatenate for final o/p
    return np.c_[d1[d1mask], d2[d2mask,1:]]

样本运行-

^{pr2}$

我们还可以使用broadcasting来获得索引,然后用整数索引代替掩蔽,如下-

idx = np.argwhere(d1[:,0,None] == d2[:,0])
out = np.c_[d1[idx[:,0]], d2[idx[:,0,1:]

相关问题 更多 >

    热门问题