【发布时间】:2020-07-05 03:23:29
【问题描述】:
我有一个纬度和经度的数据框。我想获得一个大小为 n_samples 的样本,该样本覆盖了数据框中的大部分区域。起初,我想先按经纬度对数据帧进行排序,然后使用模运算来选择均匀分布的行。但是,这在我希望对 100 行中的 27 行进行采样的情况下不起作用,因为 100 % 27 不是 0。请注意,当尝试使用 n_sample=80 时,这个问题会变得更糟(因为它会对所有 100 行进行采样行)。所以以后简单地调整行数是没有用的。
import random
import pandas as pd
n_samples = 27
lat = [random.uniform(30, 50) for i in range(100)]
lon = [random.uniform(-130, -100) for i in range(100)]
loc_df = pd.DataFrame([lat, lon]).T
loc_df.columns = ['lat', 'lon']
# Sort loc_df by lat/lon
loc_df = loc_df.sort_values(['lat', 'lon'])
# Sample every n rows
# Tends to sample either too many or too few rows
# In this case, we will be sampling 24 instead of 27 rows
every_n = round(loc_df.shape[0]/n_samples)
sample_df = loc_df[::every_n].reset_index(drop=True)
【问题讨论】:
标签: python pandas sorting sample