问题 NumPy中的SQL join或R的merge()函数?


是否有一个实现,我可以根据他们的键加入两个数组?说到这一点,是在NumPy列中存储密钥的规范方法(NumPy没有'id'或'rownames'属性)?


3713
2017-10-15 09:13


起源



答案:


如果你只想使用numpy,你可以使用 结构化数组 和 lib.recfunctions.join_by 功能(见 http://pyopengl.sourceforge.net/pydoc/numpy.lib.recfunctions.html)。一个小例子:

In [1]: import numpy as np
   ...: import numpy.lib.recfunctions as rfn
   ...: a = np.array([(1, 10.), (2, 20.), (3, 30.)], dtype=[('id', int), ('A', float)])
   ...: b = np.array([(2, 200.), (3, 300.), (4, 400.)], dtype=[('id', int), ('B', float)])

In [2]: rfn.join_by('id', a, b, jointype='inner', usemask=False)
Out[2]: 
array([(2, 20.0, 200.0), (3, 30.0, 300.0)], 
      dtype=[('id', '<i4'), ('A', '<f8'), ('B', '<f8')])

另一种选择是使用 大熊猫 (文件)。我没有使用它的经验,但它提供了比标准numpy更强大的数据结构和功能,“使用”关系“或”标记“数据既简单又直观”。它肯定有加入和合并功能(例如见 http://pandas.sourceforge.net/merging.html#joining-on-a-key)。


12
2017-10-15 15:22



啊,忘记了 recfunctions。我正在评估熊猫...这么多选择......谢谢。 - hatmatrix


答案:


如果你只想使用numpy,你可以使用 结构化数组 和 lib.recfunctions.join_by 功能(见 http://pyopengl.sourceforge.net/pydoc/numpy.lib.recfunctions.html)。一个小例子:

In [1]: import numpy as np
   ...: import numpy.lib.recfunctions as rfn
   ...: a = np.array([(1, 10.), (2, 20.), (3, 30.)], dtype=[('id', int), ('A', float)])
   ...: b = np.array([(2, 200.), (3, 300.), (4, 400.)], dtype=[('id', int), ('B', float)])

In [2]: rfn.join_by('id', a, b, jointype='inner', usemask=False)
Out[2]: 
array([(2, 20.0, 200.0), (3, 30.0, 300.0)], 
      dtype=[('id', '<i4'), ('A', '<f8'), ('B', '<f8')])

另一种选择是使用 大熊猫 (文件)。我没有使用它的经验,但它提供了比标准numpy更强大的数据结构和功能,“使用”关系“或”标记“数据既简单又直观”。它肯定有加入和合并功能(例如见 http://pandas.sourceforge.net/merging.html#joining-on-a-key)。


12
2017-10-15 15:22



啊,忘记了 recfunctions。我正在评估熊猫...这么多选择......谢谢。 - hatmatrix