python - 在两个 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 放在它的位置。
解决方案
您正在使用第一个元素,例如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]])
笔记:
- 我映射
dict
和pd.Series
在可迭代(a, b)
- 我将那些
pd.concat
产生 Pandas DataFrame 的对象传递给 - 填写缺失值
0
- 重置索引以取回您的那些密钥
- 只了解价值观
如果你有另一个数组
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
推荐阅读
- python-3.x - 如何检查 json 文件是否有特定元素?
- git - 将存储库上传到 GitHub 的问题
- python - Python:异步处理来自其他异步任务的结果的任务
- javascript - JavaScript“classList”切换不切换元素的类名
- windows - 我需要通过 cmd 请求将 Spotify 的当前歌曲输出到 txt 文件中
- php - Php Soap 客户端在通话后不接听
- r - 如何在 OS X 10.14 中安装 rgl
- c# - 列表中的唯一日期
- python - 如何将列表转换为使用元组作为键的字典
- node.js - 错误:未指定默认引擎,节点服务器中未提供扩展