【问题标题】:Python: Combining 2D arrays with 1 common column that has different valuesPython:将 2D 数组与 1 个具有不同值的公共列组合
【发布时间】:2017-10-06 10:04:26
【问题描述】:

我想组合两个数组,它们代表一条曲线,其中变量是第 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 列被组合,并且两个第 1 列都堆叠有间隙,对应的第 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 比较陌生,所以请不要对我的知识做出任何假设,除非它很少。

谢谢。

【问题讨论】:

    标签: python arrays multiple-columns interpolation


    【解决方案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.]]
    

    【讨论】:

    • 谢谢你这在一定程度上奏效了!我不知道熊猫图书馆。那是如何创建nan行的?现在我需要将第 0 列按数字顺序排列,以便它保留相应的 col 1 和 col 2 值,以便我可以插值以替换 nan 值
    • d3.fillna(None, inplace=True) # 用 None 替换 nan
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 2022-06-10
    • 2012-08-21
    相关资源
    最近更新 更多