Python 用pandas平均二维地质数据
超级用户 我有一个多索引数据帧,看起来像这样:Python 用pandas平均二维地质数据,python,pandas,Python,Pandas,超级用户 我有一个多索引数据帧,看起来像这样: DATA DATETIME PLATFORM OBTYPE LONGITUDE LATITUDE PRESSURE 2014-12-01 GPSRO ba 164.87 -16.22 0.2086 -1.080487 -99.87 51.67
DATA
DATETIME PLATFORM OBTYPE LONGITUDE LATITUDE PRESSURE
2014-12-01 GPSRO ba 164.87 -16.22 0.2086 -1.080487
-99.87 51.67 433.9650 9.404006
-99.84 51.66 447.1593 8.621209
-99.82 51.65 460.5582 9.060276
-99.78 51.63 474.2856 4.033578
-99.75 51.62 488.2451 -3.564176
-99.72 51.61 502.6438 2.418914
-99.71 51.60 517.6590 9.504872
-99.68 51.59 533.0165 2.074352
-99.63 51.57 548.5572 1.692488
-99.61 51.56 564.5204 1.287064
-99.58 51.55 581.1121 2.060976
... ...
-98.81 51.25 885.3300 1.078527
-98.79 51.24 911.0555 -6.613088
-98.66 51.20 936.2419 4.369489
-98.61 51.18 962.0027 4.806168
-98.60 51.17 989.4301 -9.383631
DATA
DATETIME PLATFORM OBTYPE LONGITUDE LATITUDE PRESSURE
2014-12-01 GPSRO ba 0.0 -89.50 0.2086 -1.080487
-88.50 474.2856 4.033578
-87.50 488.2451 -3.564176
... ...
1.0 -89.50 0.2086 -1.080487
-88.50 474.2856 4.033578
-87.50 488.2451 -3.564176
... ...
“纬度”列的值介于-90到+90之间
“经度”列的值从0到360
数据列是在观测纬度和经度处的观测值
我想创建一个新的数据帧,其中包含1度乘以1度的数据框平均值
新的数据帧将如下所示:
DATA
DATETIME PLATFORM OBTYPE LONGITUDE LATITUDE PRESSURE
2014-12-01 GPSRO ba 164.87 -16.22 0.2086 -1.080487
-99.87 51.67 433.9650 9.404006
-99.84 51.66 447.1593 8.621209
-99.82 51.65 460.5582 9.060276
-99.78 51.63 474.2856 4.033578
-99.75 51.62 488.2451 -3.564176
-99.72 51.61 502.6438 2.418914
-99.71 51.60 517.6590 9.504872
-99.68 51.59 533.0165 2.074352
-99.63 51.57 548.5572 1.692488
-99.61 51.56 564.5204 1.287064
-99.58 51.55 581.1121 2.060976
... ...
-98.81 51.25 885.3300 1.078527
-98.79 51.24 911.0555 -6.613088
-98.66 51.20 936.2419 4.369489
-98.61 51.18 962.0027 4.806168
-98.60 51.17 989.4301 -9.383631
DATA
DATETIME PLATFORM OBTYPE LONGITUDE LATITUDE PRESSURE
2014-12-01 GPSRO ba 0.0 -89.50 0.2086 -1.080487
-88.50 474.2856 4.033578
-87.50 488.2451 -3.564176
... ...
1.0 -89.50 0.2086 -1.080487
-88.50 474.2856 4.033578
-87.50 488.2451 -3.564176
... ...
诸如此类
在熊猫身上这样做的最佳和有效的方法是什么
谢谢要做到这一点,您需要几个步骤:
np.floor
功能,因为它可以做你想要的事情,让事情变得简单。也有被矢量化的优势,所以性能应该是体面和稳定的pandas
具有nicegroupby
功能(and)将numpy导入为np
无索引\u df=df.reset\u索引()
无索引测向['经度]=无索引测向['经度]。应用(λx:[e表示范围内的e(0,361,经度)如果将e添加到已接受的答案中:lambda函数非常慢。只要有几十万行和几十个存储箱,计算就可能需要几分钟。我发现以下几点要快得多,只需要几秒钟:
import numpy as np
def find_nearest(value, array):
idx = (np.abs(array - value)).argmin()
return array[idx]
N_bins_long = 360
N_bins_lat = 180
longbins = np.linspace(df.LONGITUDE.min(), df.LONGITUDE.max(), N_bins_long)
latbins = np.linspace(df.LATITUDE.min(), df.LATITUDE.max(), N_bins_lat)
no_index_df = df.reset_index()
no_index_data.['LONGITUDE'] = no_index_data.['LONGITUDE'].apply(find_nearest, array = longbins)
no_index_data.['LATITUDE'] = no_index_data.['LATITUDE'].apply(find_nearest, array = latbins)
avg_data = no_index_data.groupby(
['DATETIME', 'PLATFORM', 'OBTYPE', 'LONGITUDE', 'LATITUDE', 'PRESSURE']
).mean()
不太清楚如何为经度
和纬度
列获取新值。算法是什么?它只是数据。它可以来自任何地方。例如,GPS定位。这是有效的。但是,你所做的装箱只是截断纬度/纬度。我想用不同的装箱间隔进行测试。1,2,5度的箱子。获取r压力聚合的id,我认为可以简单地完全删除压力列,因为所有压力级别都是为一个容器累积的。编辑经度的实际失败。出现一个索引器:indexer:list index out-range
您确定经度在[0,360]内吗?因为如果是的话,你不应该有错误。我正要回信。我的经度限制是[-180180]。修好了就行了。谢谢。这正是我想要的。对于压力或高度,我也会这样做。