如何从数据框中平均采样?

Dem*_*nos 5 python pandas

假设我有一些观察,每个观察都有从1到的指示类n。这些类别中的每一个不一定在数据集中均等出现。

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

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)
Run Code Online (Sandbox Code Playgroud)

是否有熊猫函数可以同样采样?

Kar*_*tik 7

要获得更多的优雅,您可以执行以下操作:

df.groupby('classes').apply(lambda x: x.sample(sample_size))
Run Code Online (Sandbox Code Playgroud)

延期:

您可以使sample_sizea函数成为组大小的函数,以相等的概率(或成比例地)采样:

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

它不会得到确切的行数,total_sample_size但是采样将比朴素的方法成比例。

  • 您应该在 groupby 方法中使用 `group_keys=False` 以避免索引被冗余的组名称替换。 (2认同)