我有一个很大的df(约100万行),带有一堆列。此列之一包含一些分类数据,例如Name
:
Code Regione CodeProv Origin Name
0 1 Piemonte 1 Torino
1 1 Piemonte 2 Vercelli
2 1 Piemonte 2 Vercelli
我要做的是获取随机数的行,例如10k,但是这些行应包含Name
列的至少20个唯一值,无论每个唯一类别的行号都相同
答案 0 :(得分:2)
如果您的姓名数量为>> 20,并且您的姓名分布不集中在少于20个姓名之间,那么不要过于复杂,只需执行以下操作:
number_of_unique_names_in_sample = 0
while number_of_unique_names_in_sample < 20:
df_sample = df.sample(n=10_000)
number_of_unique_names_in_sample = df_sample["Name"].nunique()
并且可能添加一个计数器来限制迭代次数,以防您的分布发生变化(例如,在一个小的测试样本中)。
答案 1 :(得分:1)
这可能是您要的
name_cols = [list_of_names]
samples_per_name = 500
df[df['Name'].isin(name_cols)].groupby('Name').apply(lambda x: x.sample(samples_per_name))
结果将是10000行,其中len(name_cols)
(在您的示例中为20行)每行包含500行