基于ID-个体关联数据集的随机采样及唯一个体统计需求
问题与解决方案
问题背景
现有一份ID-个体关联数据集,包含数百行记录:
- 每个ID唯一对应一个个体
- 单个个体可关联多个ID(例如个体A关联ID 1、3)
示例数据集:
IDs individual 1 A 2 B 3 A 4 C 5 D 6 D
需求
执行500次随机采样,每次采样规则:
- 采样ID数量随机在1-100之间
- 允许单次采样内ID重复采样(即有放回采样)
最终生成一个新DataFrame,汇总每次采样的以下信息:
- 采样编号(random.sample)
- 本次采样的ID数量(number.of.IDs)
- 本次采样检测到的唯一个体数量(unique.individuals)
输出示例:
random.sample number.of.IDs unique.individuals 1 10 7 2 86 74 3 4 1 4 61 50 5 34 22 6 98 80
解决方案(Python + Pandas)
以下代码可直接实现需求:
import pandas as pd import numpy as np # 读取原始数据集(若已有本地文件,可替换为pd.read_csv("your_data.csv")) # 示例数据构造 data = { 'IDs': [1,2,3,4,5,6], 'individual': ['A','B','A','C','D','D'] } df = pd.DataFrame(data) # 初始化结果存储列表 results = [] # 执行500次采样循环 for sample_num in range(1, 501): # 随机生成本次采样的ID数量(1-100) sample_size = np.random.randint(1, 101) # 有放回采样ID sampled_ids = np.random.choice(df['IDs'], size=sample_size, replace=True) # 匹配采样ID对应的个体并统计唯一个体数 unique_ind_count = df[df['IDs'].isin(sampled_ids)]['individual'].nunique() # 存入结果 results.append({ 'random.sample': sample_num, 'number.of.IDs': sample_size, 'unique.individuals': unique_ind_count }) # 转换为目标DataFrame result_df = pd.DataFrame(results).set_index('random.sample') # 查看前5条结果示例 print(result_df.head())
代码说明
np.random.randint(1,101):生成1到100之间的随机采样规模np.random.choice(..., replace=True):实现ID的有放回重复采样isin():匹配采样ID对应的个体记录,nunique()统计去重后的个体数量- 循环完成后将结果列表转换为指定格式的DataFrame
内容的提问来源于stack exchange,提问作者kalex
相关产品推荐
相关产品推荐

