python - 用 pandas 平均二维地理数据

标签 python pandas

super 用户,

我有一个多索引数据框,如下所示:

                                                        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

LATITUDE 列的值介于 -90 到 +90 之间 LONGITUDE 列的值介于 0 到 360 之间 DATA列是观测经纬度处的观测值

我想创建一个新的 DataFrame,其中包含 DATA 的 1 度 x 1 度框平均值 新的 DataFrame 将如下所示:

                                                            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
...                                                          ...

依此类推。

在 pandas 中执行此操作的最佳且有效的方法是什么?

谢谢

最佳答案

您需要执行几个步骤才能做到这一点:

  1. 创建您的垃圾箱,这里我使用 np.floor 函数,因为它可以满足您的需求并让事情变得简单。还具有矢量化的优点,因此性能应该不错且稳定。
  2. 通过取平均值来汇总这些数据箱。为此,pandas 具有很好的 groupby 函数( docsmore on the subject )。

这是我要做的(免责声明:我还没有测试过它,所以可能需要一些调整):

import numpy as np

no_index_df = df.reset_index()
no_index_df['LONGITUDE'] = no_index_df['LONGITUDE'].apply(lambda x: [e for e in range(0, 361, longitude_bin) if e <= x][-1])
no_index_df['LATITUDE'] = no_index_df['LATITUDE'].apply(lambda x: [e for e in range(-90, 91, latitude_bin) if e <= x][-1])

avg_data = no_index_data.groupby(
    ['DATETIME', 'PLATFORM', 'OBTYPE', 'LONGITUDE', 'LATITUDE', 'PRESSURE']
).mean()

此方法的唯一问题是,由于 'PRESSURE' 上的聚合,同一(经度,纬度) 对可能有多个行。您可以将其从 groupby 列表中取出,它也会被平均。

编辑:我更改了步骤 1(创建垃圾箱)以允许您使用任何间隔。

关于python - 用 pandas 平均二维地理数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36970615/

相关文章:

python - 如何返回值 If One List Against Another Dataframe (Pandas)?

python - 将时间戳合并到自定义时间段中

python - 按名称获取DataFrame索引

python - Pandas - 合并包含一些空值的列

python - 字典键和 eval 中的破折号

python - 如何统计数字的总设置位数

python - 循环浏览 Pandas Series 时获取下一个和上一个条目

python正则表达式与unicode匹配城市名称

python - 使用 Gevent/Tornado 和 Flask 的 Socket.io 处理程序

python - 有没有办法在重新索引/上采样时间序列时防止 dtype 从 Int64 更改为 float64?