Python:将2D数组与1个具有不同值的公共列组合

时间:2017-10-06 10:04:27

标签: python arrays multiple-columns interpolation

我想组合两个表示变量为第1列的曲线的数组,但是第0列值并不总是匹配:

import numpy as np
arr1= np.array([(12,1003),(17,900),(20,810)])
arr2= np.array([(10,1020),(17,902),(19,870),(21,750)])

我想将这些组合成一个数组,其中列0被组合,并且两个列都堆叠有间隙,其中没有相应列0值的值,如下所示:

arr3=np.array([((10,None,1020),(12,1003,None),(17,900,902),(19,None,870),(20,810,None),(21,None,750))])

这样做的原因是我希望能够为每个数组获取第二列的平均值,但它们不是完全相同的列0值,因此创建此数组的想法是插值以替换所有None值,然后从第1列和第2列创建平均值,并有一个额外的列来表示。

到目前为止,我已经将numPy用于其他所有内容,但显然已经遇到了np.column_stack函数,因为它需要相同长度的列表,并且根据列o的值无法进行堆叠。最后,我不想创建数据拟合,因为实际数据是非线性的,并且可能不一致,因此拟合不起作用,插值似乎是最准确的方法。

可能已经有答案,但由于我不知道如何描述它,我无法找到它。另外我对python相对较新,所以请不要对我的知识做任何假设,除非它很少。

谢谢。

1 个答案:

答案 0 :(得分:1)

这会有帮助吗?

import pandas
import numpy as np

arr1= np.array([(12,1003),(17,900),(20,810)])
arr2= np.array([(10,1020),(17,902),(19,870),(21,750)])

d1 = pandas.DataFrame(arr1)
d2 = pandas.DataFrame(arr2)

d1.columns = d2.columns  = ['t','v']
d3 =  pandas.DataFrame(np.array(d1.merge(d2, on='t',how='outer')))
print d3.values

# use d3.as_matrix() to convert to numpy array 

输出

[[   12.  1003.    nan]
 [   17.   900.   902.]
 [   20.   810.    nan]
 [   10.    nan  1020.]
 [   19.    nan   870.]
 [   21.    nan   750.]]