2024-09-29 02:28:50 发布
网友
我有一个巨大的df(~100万行)和一堆列。其中一列包含一些分类数据,如Name:
Name
Code Regione CodeProv Origin Name 0 1 Piemonte 1 Torino 1 1 Piemonte 2 Vercelli 2 1 Piemonte 2 Vercelli
我想做的是获得一个随机数目的行,比如10k,但是这些行应该至少包含Name列的20个唯一值,不管每个唯一类别是否具有相同的行号
如果您的姓名数量为>&燃气轮机;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行
len(name_cols)
如果您的姓名数量为>&燃气轮机;20并且您的姓名分布不会集中在不到20个姓名的范围内,那么不要使其过于复杂,只需这样做:
并且可能添加一个计数器来限制迭代次数,以防您的分布发生变化(例如在一个小测试样本中)
这可能是你的要求
df[df['Name'].isin(name_cols)].groupby('Name').apply(lambda x: x.sample(samples_per_name))
结果将是10000行
len(name_cols)
(在您的示例中为20行),每行包含500行相关问题 更多 >
编程相关推荐