使用 Pandas 仅获取 DataFrame 的样本

Get only a sample of a DataFrame with Pandas

我有一个 DataFrame,它有两列 contenttarget。 DataFrame 有 1.000.000 行长,这是目标的分布:

我需要在 DataFrame 中获得相同数量的目标值,所以我使用 sample() 来只获得目标为 x 的固定数量的行,这是我正在使用的代码:

samples = 100000
dataset[dataset['target'] == 0] = dataset[dataset['target'] == 0].sample(n=samples, axis=0)
dataset[dataset['target'] == 1] = dataset[dataset['target'] == 1].sample(n=samples, axis=0)
dataset[dataset['target'] == 2] = dataset[dataset['target'] == 2].sample(n=samples, axis=0)

例如,如果在执行后我访问 dataset[dataset['target'] == 2],它将 return 形状为 (100000, 2) 但仅访问 dataset return 完全 与以前相同的数据集,我做错了什么?

由于您在每个 Target 中采样的样本较少,您可以使用 groupby().sample:

# random_state for repeatability. Remove if needed
dataset = dataset.groupby('target').sample(n=samples, random_state=42)