假设我有一些观察结果,每个观察结果都有一个从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)
是否有大熊猫功能可以同样采样?
答案 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
,但采样将比天真的方法更成比例。