Pandas:跨与列值关联的动态窗口大小的计算



我有一个地理位置点(日期时间、纬度、经度)的数据帧,我已经用关联的地理哈希标记了这些数据帧。

日期时间 纬度 经度 地理哈希 363446 2015-02-28 16:00:44.837 41.712755 -87.614916 dp3tq38 363428 2015-02-28 16:26:30.047 41.434128 -87.505173 dp3g8yb 363425 2015-02-28 16:30:02.659 41.421538 -87.480122 dp3g9kd 363411 2015-02-28 16:45:17.706 41.377853 -87.470677 dp3g3s9 363406 2015-02-28 16:54:50.763 41.290409 -87.467947 dp3fcse 363401 2015-02-28 17:01:21.800 41.295870 -87.439538 dp3ffm8 363373 2015-02-28 17:46:06.890 41.299363 -87.433795 dp3ffqk 363368 2015-02-28 18:07:05.769 41.299243 -87.433823 dp3ffqk 363367 2015-02-28 18:11:50.918 41.299261 -87.433823 dp3ffqk 363359 2015-02-28 18:23:33.470 41.299290 -87.433819 dp3ffqk

我将连续地理哈希的每个视为一个独立的事件。 我想计算聚合并计算基本统计数据(最大值、最小值、平均值)的事件。

例如,在数据帧上方的最后四行与地理哈希dp3ffqk相关联。 地理哈希dp3ffqk存在于数据帧中的其他位置,因此groupby似乎不合适。 我对这地理哈希dp3ffqk的期望输出是最小和最大时间戳之间的持续时间。

我看过cumsumrollingcut等。 但是,它们似乎都暗示了一个静态窗口。 就我而言,我的窗口大小将是动态的。

我尝试使用shift()创建额外的列GEOHASH_。 然后在GEOHASHGEOHASH_之间执行逐行比较,并在适当时更新词典。 这真的很混乱。

我期望的输出是合并与每个地理哈希相关的事件,以及基于为每个地理哈希计算的持续时间集合的统计数据。

GEOHASH 最大最小平均值 1 dp3ffqk 112 10 42.34 2 dp3ffm8 72 11 38.21

IIUC,即使你的数据没有显示它,我想你只想考虑GEOHASH的连续分组。 这意味着如果相同的 GEOHASH 稍后出现,它将被视为不同的组。

v = df.GEOHASH.values
groups = np.append(v[:-1] != v[1:], False).cumsum()
df.groupby([df.GEOHASH, groups]).agg(['min', 'max', 'mean'])
LATITUDE                        LONGITUDE                      
min        max       mean        min        max       mean
GEOHASH                                                                    
dp3fcse 5  41.290409  41.290409  41.290409 -87.467947 -87.467947 -87.467947
dp3ffm8 6  41.295870  41.295870  41.295870 -87.439538 -87.439538 -87.439538
dp3ffqk 6  41.299243  41.299363  41.299289 -87.433823 -87.433795 -87.433815
dp3g3s9 4  41.377853  41.377853  41.377853 -87.470677 -87.470677 -87.470677
dp3g8yb 2  41.434128  41.434128  41.434128 -87.505173 -87.505173 -87.505173
dp3g9kd 3  41.421538  41.421538  41.421538 -87.480122 -87.480122 -87.480122
dp3tq38 1  41.712755  41.712755  41.712755 -87.614916 -87.614916 -87.614916

更多参与,也没有对 GEOHASH 进行排序

v = df.GEOHASH.values
groups = np.append(v[:-1] != v[1:], False).cumsum()
funcs = dict(
LATITUDE=['min', 'max', 'mean'],
LONGITUDE=['min', 'max', 'mean'],
DATETIME=['min', 'max', 'count']
)
df.groupby([df.GEOHASH, groups], sort=False).agg(funcs)
LATITUDE                        LONGITUDE                                      DATETIME                              
min        max       mean        min        max       mean                     min                     max count
GEOHASH                                                                                                                          
dp3tq38 1  41.712755  41.712755  41.712755 -87.614916 -87.614916 -87.614916 2015-02-28 16:00:44.837 2015-02-28 16:00:44.837     1
dp3g8yb 2  41.434128  41.434128  41.434128 -87.505173 -87.505173 -87.505173 2015-02-28 16:26:30.047 2015-02-28 16:26:30.047     1
dp3g9kd 3  41.421538  41.421538  41.421538 -87.480122 -87.480122 -87.480122 2015-02-28 16:30:02.659 2015-02-28 16:30:02.659     1
dp3g3s9 4  41.377853  41.377853  41.377853 -87.470677 -87.470677 -87.470677 2015-02-28 16:45:17.706 2015-02-28 16:45:17.706     1
dp3fcse 5  41.290409  41.290409  41.290409 -87.467947 -87.467947 -87.467947 2015-02-28 16:54:50.763 2015-02-28 16:54:50.763     1
dp3ffm8 6  41.295870  41.295870  41.295870 -87.439538 -87.439538 -87.439538 2015-02-28 17:01:21.800 2015-02-28 17:01:21.800     1
dp3ffqk 6  41.299243  41.299363  41.299289 -87.433823 -87.433795 -87.433815 2015-02-28 17:46:06.890 2015-02-28 18:23:33.470     4

相关内容

  • 没有找到相关文章

最新更新