在两个Numpy数组上执行“加入”操作

时间:2018-07-18 19:41:51

标签: python python-3.x pandas numpy data-manipulation

我有两个类似下面的numpy数组:

a = np.array([[1, 10], [2, 12], [3, 5]])
b = np.array([[1, 0.78], [3, 0.23]])

列表中的第一个数字是id参数,第二个数字是一个值。我正在寻求结合。预期的输出等于:

np.array([1, 10, 0.78], [2, 12, 0], [3, 5, 0.23])

是否有一个功能(或功能组合可以为我做到这一点?非常感谢您的帮助。

如果未找到对象,则在该位置放置一个0。

1 个答案:

答案 0 :(得分:2)

您正在使用第一个元素,例如字典的key或熊猫系列的索引。因此,我使用了那些更适合您要组合的工具。然后,我转换回您要查找的数组。

import pandas as pd
import numpy as np

a = np.array([[1, 10], [2, 12], [3, 5]])
b = np.array([[1, 0.78], [3, 0.23]])

pd.concat(
    map(pd.Series, map(dict, (a, b))), axis=1
).fillna(0).reset_index().values

array([[ 1.  , 10.  ,  0.78],
       [ 2.  , 12.  ,  0.  ],
       [ 3.  ,  5.  ,  0.23]])

注意:

  1. 我将dictpd.Series映射到可迭代的(a, b)
  2. 我将它们传递给pd.concat,后者会生成Pandas DataFrame
  3. 0填充缺失值
  4. 重置索引以获取您的那些键
  5. 获取价值

如果您还有另一个数组

a = np.array([[1, 10], [2, 12], [3, 5]])
b = np.array([[1, 0.78], [3, 0.23]])
c = np.array([[1, 3.14], [2, 3.14]])

pd.concat(
    map(pd.Series, map(dict, (a, b, c))), axis=1
).fillna(0).reset_index().values

array([[ 1.  , 10.  ,  0.78,  3.14],
       [ 2.  , 12.  ,  0.  ,  3.14],
       [ 3.  ,  5.  ,  0.23,  0.  ]])

如果要快速将数组转换为Pandas系列
请注意,我写了新名称a_b_c_,以避免覆盖您的其他名称

a_, b_, c_ = map(pd.Series, map(dict, (a, b, c)))

获取数据框

df = pd.concat(map(pd.Series, map(dict, (a, b, c))), axis=1).fillna(0)
df

    0     1     2
1  10  0.78  3.14
2  12  0.00  3.14
3   5  0.23  0.00