如何取更均衡的样本数据Python

How to take a more balanced sample data Python

我有一个包含标准化百分比信息的数据框。 例如

wordCount 数字百分比

2.0 1282 0.267345

1.0 888 0.185213

3.0 1124 0.170791

4.0 1250 0.152877

5.0 554 0.084864

6.0 333 0.058904

7.0 160 0.024290

8.0 111 0.016851

所有百分比总和为1。 数据框是 6000 个条目。我想从中抽取 2000 个样本。 2000样本尽量平衡

应该包括最大的少量百分比数据和最小的大量百分比数据。

我不知道怎么做。

例如。 2000 具有来自 wordCount 8.0 的所有数据,具有来自 2.0 的最小数据。

绘制伽马分布时,线条应尽可能平坦。

首先,您需要计算从每个字数中抽取多少个样本。假设 'wc' 是一个包含列 'wordCount' 和 'number':

的数据框
 options = len(wc)
 remaining = 2000
 wc['how many'] = 0
 wc = wc.sort_values('number').reset_index().drop('index', axis=1)
 for i in range(options):
     wc['how many'][i] = min(wc['number'][i], remaining // (options - i))
     remaining -= wc['how many'][i]

'how many' 列现在有您要从每个 wordCount 中抽样的数字。 然后在您的数据框上,假设名为 'data',您应该有一个名为 'wordCount,' 的匹配列,您可以使用以下方法对所需的数字进行采样:

for i in data['wordCount'].unique():
    part_data = data[data['wordCount'] == i]
    part_sample = part_data.sample(wc[wc['wordCount'] == i].iloc[0, -1])
    try:
        all_samples = pd.concat([all_samples, part_sample])
    except NameError:
        all_samples = part_sample.copy()

最后,'all_samples' 应该有 2000 个样本与您要求的分布。

顺便说一句:在数据帧行上循环通常是一个非常糟糕的主意,它本可以被矢量化,但由于它只有 8 行,我允许自己。