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
    具有nice
    groupby
    功能(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]。修好了就行了。谢谢。这正是我想要的。对于压力或高度,我也会这样做。