我有一个示例数据帧,带有一个country
列。每个国家记录的相对数量为:
d1.groupby("country").size()
country
Australia 21
Cambodia 58
China 280
India 133
Indonesia 195
Malaysia 138
Myanmar 51
Philippines 49
Singapore 1268
Taiwan 47
Thailand 273
Vietnam 288
如果每个国家有>;100个样本,我如何从中随机选择100个样本?(如果国家有<;=100个样本,则不执行任何操作)。目前,我为新加坡做这件事:
names_nonsg_ls = []
names_sg_ls = []
# if the country is not SG, add it to names_nonsg_ls.
# else, add it to names_sg_ls, which will be subsampled later.
for index, row in d0.iterrows():
if str(row["country"]) != "Singapore":
names_nonsg_ls.append(str(row["header"]))
else:
names_sg_ls.append(str(row["header"]))
# Select 100 random names from names_sg_ls
names_sg_ls = random.sample(names_sg_ls, 100)
# Form the list of names to retain
names_ls = names_nonsg_ls + names_sg_ls
# create new dataframe
d1 = d0.loc[d0["header"].isin(names_ls)]
但是手动为每个有100个名字的国家创建一个新的列表只是一个糟糕的形式,更不用说我首先必须手动挑选出有100个名字的国家。你知道吗
您可以按国家分组,然后根据组大小进行抽样:
示例:
相关问题 更多 >
编程相关推荐