如何从数据框中均等地采样?

时间:2016-11-17 02:01:33

标签: python pandas

假设我有一些观察结果,每个观察结果都有一个从1n的指示类。这些类中的每一个可能不一定在数据集中同等地出现。

我如何从数据框中同样采样?现在我做的事......

frames = []
classes = df.classes.unique()

for i in classes:
    g = df[df.classes = i].sample(sample_size)
    frames.append(g)

equally_sampled = pd.concat(frames)

是否有大熊猫功能可以同样采样?

1 个答案:

答案 0 :(得分:5)

为了更优雅,你可以这样做:

df.groupby('classes').apply(lambda x: x.sample(sample_size))

扩展:

您可以使sample_size组大小的函数以相同的概率(或按比例)进行采样:

nrows = len(df)
total_sample_size = 1e4
df.groupby('classes').\
    apply(lambda x: x.sample(int((x.count()/nrows)*total_sample_size)))

它不会导致确切的行数为total_sample_size,但采样将比天真的方法更成比例。