【问题标题】:"ValueError: setting an array element with a sequence" Assigning the mean value of the neighboor of a point in pandas“ValueError: setting an array element with a sequence”在pandas中分配一个点的邻居的平均值
【发布时间】:2020-11-09 12:21:36
【问题描述】:

我有一个 numpy 数组,其中包含 5 个点的坐标 (X,Y,Z):

Coordinates = np.array([[1000, 1000,10],[1003, 1003,10],[1004, 1004,10],[1002, 1002,10],[1001, 1001,10]])

另一方面,我有一个 Pandas 数据框,其中包含这 5 个点中每个点的变量值:

d = {"Values": [0.25, 0.24,0.23,0.3,0.22]}
df = pd.DataFrame(data=d)

使用 treeBall_Neighbors 我得到半径为 2m 内每个点的邻居的索引:

treeBall_Neighbors = sklearn.neighbors.BallTree(Coordinates, leaf_size=2)
indices_Neighbors=treeBall_Neighbors.query_radius(Coordinates[:], r=2)

最后我想将每个点的邻居的平均值添加到数据框中:

df["Neighbors_Values"]=df["Values"].iloc[indices_Neighbors.tolist()[:]].mean()

但遗憾的是,我收到错误“ValueError: setting an array element with a sequence”。我得到的唯一部分解决方案仅适用于第一行:

df["Neighbors_Values"]=df["Values"].iloc[indices_Neighbors.tolist()[0]].mean()

您知道如何在不循环的情况下获得其他值吗?最终结果应如下所示:

   Values  Neighbors_Values
0    0.25             0.235
1    0.24             0.256667
2    0.23             0.235
3    0.30             0.253333
4    0.22             0.256667

【问题讨论】:

    标签: python pandas numpy


    【解决方案1】:

    最后我用下面的代码解决了这个问题(使用函数和 lambda):

    def Obtain_Mean(x, df):
        print(df.Values.iloc[x.indices_Neighbors].mean())
        return df.Values.iloc[x.indices_Neighbors].mean()
        
        #inFile["Neighbors_Z"][i]=inFile["NDVI"].iloc[indices_Neighbors.tolist()[i]].mean()
    
    
    Coordinates = np.array([[1000, 1000,10],[1003, 1003,10],[1004, 1004,10],[1002, 1002,10],[1001, 1001,10]])
    d = {"Values": [0.25, 0.24,0.23,0.3,0.22]}
    df = pd.DataFrame(data=d)
    treeBall_Neighbors = sklearn.neighbors.BallTree(Coordinates, leaf_size=2)
    indices_Neighbors=treeBall_Neighbors.query_radius(Coordinates[:], r=2)
    
    
    df["indices_Neighbors"]=indices_Neighbors
    df['Mean_Neighbors'] = df.apply(lambda x: Obtain_Mean(x, df) , axis=1)
    

    【讨论】:

      猜你喜欢
      • 2018-09-18
      • 2016-07-07
      • 2021-03-17
      • 2014-05-25
      • 2011-04-19
      • 2018-11-24
      • 2021-09-06
      • 2018-04-29
      • 1970-01-01
      相关资源
      最近更新 更多