如何对 Pandas 中的 2D-binned 数据执行随机抽样

问题描述

我有地理数据的pandas DataFrame,其中包含以米表示的纬度和经度列。

我想将纬度和经度分箱为 5 米,所以我执行如下。

df_geodata['lat_meter']=(df_geodata['lat_meter']//5)*5
df_geodata['lon_meter']=(df_geodata['lon_meter']//5)*5

此外,我想对每个 bin 执行最大 5-ea 随机采样。于是我做了如下操作。

df_sampled=df_geodata.groupby(['lat_meter','lon_meter'],as_index=False).apply(lambda obj: obj.loc[np.random.choice(obj.index,5),:])
df_sampled=df_sampled.reset_index(drop=True).drop_duplicates()

我为每个 bin 使用了这个 np.random.choice,我也为每个 bin 删除了重复项。 但是,我最近发现,当我使用相当大的数据(如 300GB,170,000,000 行)时,这会花费太多时间来执行......如 5 小时?

我认为,为每个 bin 执行 np.random.choice 需要太多时间......(其中 np 是 numpy)。 有没有更有效的方法来对 2D 分箱数据执行随机采样?

特别是,我认为不使用 numpy 而只使用 Pandas 可能更有效。我想知道更有效和快速方法。可能吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)