我是 python 新手。我正在尝试通过以下示例学习 Pandas 。 我在下面有两个数据框。
第一个是,
CCP_DETAILS_SID BASE_LINE
1 1235.89
2 369.32
3 9863.1
第二个是,
CCP_DETAILS_SID PERIOD_SID GROWTH
1 601 0.1
1 602 0.2
1 603 0.3
2 601 0.1
2 602 0.2
2 603 0.3
3 601 0.1
3 602 0.2
3 603 0.3
通过合并以上两个,我试图计算一个名为“PROJECTION_SALES”的字段。我在下面列出的字段的公式和示例。
Projection_Sales=(Base_Line)*(1+Growth) 两个数据帧之间的合并或连接条件是 CCP_DETAILS_SID。
示例
Projection_Sales(ccp_details_sid=1 and period_sid=601)=1235.89*(1+0.1)
Projection_Sales(ccp_details_sid=1 and period_sid=602)=1235.89*(1+0.1)*(1+0.2)
Projection_Sales(ccp_details_sid=1 and period_sid=603)=1235.89*(1+0.1)*(1+0.2)*(1+0.3)
Projection_Sales(ccp_details_sid=2 and period_sid=601)=369.32*(1+0.1).
相同的计算方式适用于数据框中的其他行。我在下面列出了示例输出。
CCP_DETAILS_SID PERIOD_SID PROJECTION_SALES
1 601 1359.479
1 602 1631.3748
1 603 2120.78724
2 601 406.252
2 602 487.5024
2 603 633.75312
3 601 10849.41
3 602 13019.292
3 603 16925.0796
我试过下面的方法
pd.merge(first,second,how='inner',on='CCP_DETAILS_SID')
完成此步骤后,我需要使用 cumprod 扩展代码.因为您可以观察到上面的示例具有累积乘积逻辑等。
你们能给我建议一种方法来完成这个计算吗?
最佳答案
这是你想要的吗?
In [145]: t = d1.merge(d2)
In [146]: (t.assign(x=t.assign(x=t.GROWTH+1)
.groupby('CCP_DETAILS_SID')['x']
.cumprod())
.eval("Projection_Sales = BASE_LINE * x")
.drop('x',1))
Out[146]:
CCP_DETAILS_SID BASE_LINE PERIOD_SID GROWTH Projection_Sales
0 1 1235.89 601 0.1 1359.47900
1 1 1235.89 602 0.2 1631.37480
2 1 1235.89 603 0.3 2120.78724
3 2 369.32 601 0.1 406.25200
4 2 369.32 602 0.2 487.50240
5 2 369.32 603 0.3 633.75312
6 3 9863.10 601 0.1 10849.41000
7 3 9863.10 602 0.2 13019.29200
8 3 9863.10 603 0.3 16925.07960
关于使用 Pandas 数据框进行 Python 计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49319384/