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

2024-09-29 02:28:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个巨大的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个唯一值,不管每个唯一类别是否具有相同的行号


Tags: 数据name目的df分类codeorigin类别
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()

并且可能添加一个计数器来限制迭代次数,以防您的分布发生变化(例如在一个小测试样本中)

这可能是你的要求

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行

相关问题 更多 >