我有一堆地理数据如下。 我想按经度为.2度和纬度为.2度的箱子对数据进行分组。
虽然对于纬度或经度来说这是微不足道的,但对于这两个变量,这样做最合适的是什么?
|User_ID |Latitude |Longitude|Datetime |u |v |
|---------|----------|---------|-------------------|-----|-----|
|222583401|41.4020375|2.1478710|2014-07-06 20:49:20|0.3 | 0.2 |
|287280509|41.3671346|2.0793115|2013-01-30 09:25:47|0.2 | 0.7 |
|329757763|41.5453577|2.1175164|2012-09-25 08:40:59|0.5 | 0.8 |
|189757330|41.5844998|2.5621569|2013-10-01 11:55:20|0.4 | 0.4 |
|624921653|41.5931846|2.3030671|2013-07-09 20:12:20|1.2 | 1.4 |
|414673119|41.5550136|2.0965829|2014-02-24 20:15:30|2.3 | 0.6 |
|414673119|41.5550136|2.0975829|2014-02-24 20:16:30|4.3 | 0.7 |
|414673119|41.5550136|2.0985829|2014-02-24 20:17:30|0.6 | 0.9 |
到目前为止,我所做的是创建2个线性空间:
lonbins = np.linspace(df.Longitude.min(), df.Longitude.max(), 10)
latbins = np.linspace(df.Latitude.min(), df.Latitude.max(), 10)
然后我可以使用:
进行分组groups = df.groupby(pd.cut(df.Longitude, lonbins))
然后,我可以显然迭代这些组以创建第二级。我的目标是对每个组进行统计分析,并可能在地图上显示它们看起来不太方便。
bucket = {}
for name, group in groups:
print name bucket[name] = group.groupby(pd.cut(group.Latitude, latbins))
例如,我想做一个热图,它会显示每个latlon盒子的行数,显示每个latlon盒子的速度分布,......
答案 0 :(得分:5)
这个怎么样?
step = 0.2
to_bin = lambda x: np.floor(x / step) * step
df["latbin"] = df.Latitude.map(to_bin)
df["lonbin"] = df.Longitude.map(to_bin)
groups = df.groupby(("latbin", "lonbin"))