【发布时间】:2021-02-12 06:16:37
【问题描述】:
我正在处理我在 Pandas DataFrame 中组织的一些非常庞大的数据数组。我所拥有的一个例子或多或少是这样的
>>> pd.DataFrame({'vp':aux_vp,'vs':aux_vs,'den':aux_den,'layer':facies_vol})
vp layer
0 5163.788741 0.0
1 5062.234019 0.0
2 4869.894684 0.0
3 9126.546268 1.0
4 5566.053159 1.0
... ...
1254523 6177.467626 0.0
1254524 4756.891403 0.0
1254525 6244.816685 2.0
现在,我需要计算“层”值定义的切片中“vp”列中值的平均值,以便预期输出为
vp layer averages
0 5163 0.0 5031.3
1 5062 0.0 5031.3
2 4869 0.0 5031.3
3 9126 1.0 7346
4 5566 1.0 7346
... ... ...
1254523 6177 0.0 5466.5
1254524 4756 0.0 5466.5
1254525 6244 2.0 6244
在每个切片中重复平均值是一个奖励。我真正不能做的是在不解析所有行的情况下执行此操作。我已经尝试使用 numpy 来执行此操作,识别“层”数组更改的索引,然后使用 for 循环计算它:
vp= np.array(...) #same as vp in pandas column
layer= np.array(...) #same as layer in pandas column
averages= np.zeros((len(vp))
indexes= np.add(np.where(layer[:-1] != layer[1:])[0],1) #here I compare the adjacent values of layer and store the index where they are different
for i in range(1,len(indexes)):
mean= np.mean(vp[indexes[i-1]:indexes[i]])
averages[indexes[i-1]:indexes[i]]=mean
但考虑到我拥有的数据量,这需要很长时间。 非常感谢!
【问题讨论】: