如何按DATE分组随机选取var1中3个变量求和并执行多轮模拟?
按日期分组随机抽样求和的多轮模拟实现
需求说明
按DATE列分组,每组从var1中随机选取3个不重复值求和,重复执行指定次数(示例为10次)的模拟。
示例数据构造
先还原示例中的数据集:
import pandas as pd data = { 'DATE': ['2023-01-31']*5 + ['2023-02-28']*5, 'var1': [1,2,3,4,5,6,7,8,9,10] } df = pd.DataFrame(data)
模拟实现代码
使用pandas的分组和抽样功能,结合循环完成多轮模拟:
def run_single_simulation(df): # 分组后随机抽3个值求和 return df.groupby('DATE')['var1'].apply(lambda group: group.sample(n=3, replace=False).sum()).reset_index() # 执行10轮模拟 total_simulations = 10 all_results = [] for sim_num in range(total_simulations): sim_result = run_single_simulation(df) sim_result['模拟轮次'] = f'Simulation {sim_num + 1}' all_results.append(sim_result) # 合并所有结果 final_output = pd.concat(all_results, ignore_index=True)
查看结果
可以通过以下代码查看指定轮次的结果,比如前两轮:
print(final_output[final_output['模拟轮次'].isin(['Simulation 1', 'Simulation 2'])])
输出示例(结果随机,每次运行不同):
DATE var1 模拟轮次 0 2023-01-31 9 Simulation 1 1 2023-02-28 23 Simulation 1 2 2023-01-31 8 Simulation 2 3 2023-02-28 26 Simulation 2
补充说明
- 如果需要放回抽样(允许同一值被多次选中),将
sample方法中的replace=False改为replace=True即可。 - 若要将结果保存为文件,可使用
final_output.to_csv('模拟结果.csv', index=False)。
内容的提问来源于stack exchange,提问作者stvlam22
相关产品推荐
相关产品推荐

