首页 > 解决方案 > 在两个 numpy 数组上执行“加入”

问题描述

我有两个 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 放在它的位置。

标签: pythonpython-3.xpandasnumpydata-manipulation

解决方案


您正在使用第一个元素,例如key字典的 a 或 Pandas 系列的索引。所以我使用了那些更适合你想要做的组合的工具。然后我转换回您正在寻找的数组。

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)))

获取 DataFrame

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

推荐阅读