我正在尝试从一个大数据集中抽样。
这个数据集长这样
id label
1 A
2 B
3 C
4 A
.........
生成样本数据集的代码
labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N']
df = pd.DataFrame()
N = 300000
weights = [0.350019, 0.209966, 0.126553, 0.100983, 0.053767, 0.039378, 0.029529,
0.019056, 0.016783, 0.014813, 0.014152, 0.013477, 0.009444, 0.002082]
import random
df['id'] = list(range(1, N+1))
df['label'] = list(random.choices(labels, weights=weights, k=N))
group_dict= df.groupby(['id']).apply(lambda x: list(set(x['label'].tolist()))[0]).to_dict()
df = pd.DataFrame(group_dict.items())
df.columns= ['id','label']
数据集中标签的分布情况为:
df['label'].value_counts(normalize=True)
A 0.350373
B 0.209707
C 0.126307
D 0.101353
E 0.053917
F 0.039487
G 0.029217
H 0.018780
I 0.016510
J 0.015083
K 0.014323
L 0.013467
M 0.009530
N 0.001947
我在数据集中创建了一个新列。
df['freq'] = df.groupby('label')['label'].transform('count')
当我试图取样,例如5000
个项目时
sampledf = df.sample(n=5000, weights=df.freq,
random_state=42)
在sampledf
中标签的分布与df
中的不同
A 0.6048
B 0.2198
C 0.0850
D 0.0544
E 0.0190
F 0.0082
G 0.0038
H 0.0020
I 0.0010
K 0.0008
L 0.0008
J 0.0004
我不确定为什么分布与实际数据框不同。 有人能帮我看看我漏了什么吗? 谢谢。