我已经df
并且我想从中对某些变量的分布进行一些抽样。假设df['type'].value_counts(normalize=True)
返回:
0.3 A
0.5 B
0.2 C
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情sampledf = df.sample(weights=df['type'].value_counts())
,sampledf ['type'].value_counts(normalize=True)
将返回几乎相同的分布。如何在这里通过频率传递 dict?
Weights
必须采用与原始 df长度相同的系列,因此最好将其添加为一列:
df['freq'] = df.groupby('type')['type'].transform('count')
sampledf = df.sample(weights = df.freq)
Run Code Online (Sandbox Code Playgroud)
或者不添加列:
sampledf = df.sample(weights = df.groupby('type')['type'].transform('count'))
Run Code Online (Sandbox Code Playgroud)
小智 5
除了上面的答案之外,还应该注意的是,如果您想对每种类型进行同等采样,您应该将代码调整为:
df['freq'] = 1./df.groupby('type')['type'].transform('count')
sampledf = df.sample(weights = df.freq)
Run Code Online (Sandbox Code Playgroud)
在两班的情况下。如果您有两个以上的类,则可以使用以下代码来概括权重计算:
w_j=n_samples / (n_classes * n_samples_j)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5237 次 |
最近记录: |