首页 > 解决方案 > 带有权重的熊猫样本

问题描述

我有df并且我想从中抽取一些关于一些变量分布的样本。假设df['type'].value_counts(normalize=True)返回:

0.3 A
0.5 B
0.2 C

我想做这样的东西sampledf = df.sample(weights=df['type'].value_counts()),它sampledf ['type'].value_counts(normalize=True)会返回几乎相同的分布。如何在这里以频率传递 dict?

标签: pandassample

解决方案


Weights必须采用与原始df相同长度的一系列,因此最好将其添加为列:

df['freq'] = df.groupby('type')['type'].transform('count')
sampledf = df.sample(weights = df.freq)

或不添加列:

sampledf = df.sample(weights = df.groupby('type')['type'].transform('count'))

推荐阅读