具有列熊猫的最小唯一值的行的随机值

时间:2020-02-10 15:17:36

标签: python pandas

我有一个很大的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个唯一值,无论每个唯一类别的行号都相同

2 个答案:

答案 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行