我有两个类似下面的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。
答案 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]])
注意:
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)))
获取数据框
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