0
我正在建立一个蒙特卡罗模型,并且需要模拟每个月在一个给定的月份内我捕获多少个新项目。每个月我都会添加一个随机数量的已知平均值和stdev的项目。大熊猫交错零的数据帧
months = ['2017-03','2017-04','2017-05']
new = np.random.normal(4,3,size = len(months)).round()
print new
[ 1. 5. 4.]
df_new = pd.DataFrame(zip(months,new),columns = ['Period','newPats'])
print df_new
Period newPats
0 2017-03 1.0
1 2017-04 5.0
2 2017-05 4.0
我需要将其转换为一个项目x月的数据框,其中值是一个零,直到给定的项目开始的月份。
这里的形状,我有:
df_full = pd.DataFrame(np.ones((new.sum(), len(months))),columns = months)
2017-03 2017-04 2017-05
0 1.0 1.0 1.0
1 1.0 1.0 1.0
2 1.0 1.0 1.0
3 1.0 1.0 1.0
4 1.0 1.0 1.0
5 1.0 1.0 1.0
6 1.0 1.0 1.0
7 1.0 1.0 1.0
8 1.0 1.0 1.0
9 1.0 1.0 1.0
和这里的输出我需要:
#perform transformation
print df_out
2017-03 2017-04 2017-05
0 1 1 1
1 0 1 1
2 0 1 1
3 0 1 1
4 0 1 1
5 0 1 1
6 0 0 1
7 0 0 1
8 0 0 1
9 0 0 1
的规则是,有1个项目在2017-03增加,因此,所有时段= 1为第一个记录。接下来的5个项目是在2017-04年添加的,因此之前的所有期间都为0.最后的4个项目是在2017-05年新增的,所以它们在上个月只有1个。这将进入monte carlo模拟,将运行数千次,所以我不能手动迭代列/行 - 任何向量化的建议如何处理?