Python 执行';加入';关于两个numpy数组
我有两个numpy阵列,如下所示:Python 执行';加入';关于两个numpy数组,python,python-3.x,pandas,numpy,data-manipulation,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放在相应的位置。您使用的是第一个元素
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放在相应的位置。您使用的是第一个元素,如字典的
键或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
映射到iterable(a,b)
我将它们传递给pd.concat,它将生成一个数据帧
用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. ]])
如果要快速将阵列转换为熊猫系列
请注意,我给新名字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
您正在使用第一个元素,如字典的键或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
映射到iterable(a,b)
我将它们传递给pd.concat,它将生成一个数据帧
用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. ]])
如果要快速将阵列转换为熊猫系列
请注意,我给新名字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
我没有遵循预期输出的逻辑:[2,12,0]
是如何从a
和b
的条目中派生出来的?根据我对您描述的解释,我希望输出是np.array([1,10,0.78],[2,12],[3,5,0.23])
或np array([1,10,0.78],[2,12,0],[3,5,0.23])
(如果值0
表示“未在该数组中找到”,则为后者).NumPy数组不是为您想要的锯齿状结构而设计的。可以创建数组数组或列表数组来表示锯齿状数组,但它们与大多数NumPy操作不兼容,并且也有各种各样令人讨厌的边缘情况。很抱歉,这已更新。目标不是创建锯齿状数组,但表示需要组合的两个数据列表。我不遵循预期输出的逻辑:如何从a
和b
的条目中导出[2,12,0]
?根据我对您描述的解释,我预期输出为np.array([1,10,0.78],[2,12],[3,5,0.23])
或np.数组([1,10,0.78],[2,12,0],[3,5,0.23])
(如果值0
表示“未在该数组中找到”,则为后者).NumPy数组不是为您想要的锯齿状结构而设计的。可以创建数组数组或列表数组来表示锯齿状数组,但它们与大多数NumPy操作不兼容,并且也有各种各样令人讨厌的边缘情况。很抱歉,这已更新。目标不是创建锯齿状数组,但表示需要合并的两个数据列表。好的,这很有帮助。因此,如果我在一个项目中工作,我有很多键和值,那么熊猫似乎是最好的选择。上面的答案很有意义,但我需要能够扩展它。例如,如果我有c=np.array([[1,3.14],[2,3.14]),如何将其添加到数组中,创建[[1,10,0.78,3.14],[2,12,0,3.14],[3,5,0.23,0]]如果像这样的事情在pandas中更容易实现,我很乐意使用这个工具。很高兴我能提供帮助。好的,这很有帮助。因此,如果我在一个有很多键和值的项目中工作,看起来pandas将是一条路要走。上面的答案很有意义,但我需要能够扩展它。例如,如果我有c=np.array([[1,3.14],[2,3.14]],如何将其添加到数组中,创建[[1,10,0.78,3.14],[2,12,0,3.14],[3,5,0.23,0]],如果在熊猫中这样做更容易,我很乐意使用该工具。很高兴我能提供帮助。