计算值而不循环

时间:2016-10-14 20:27:35

标签: python pandas

我试图在某些股票价格上使用大熊猫进行蒙特卡洛式投影。我使用numpy为百分比价格变化创建一些随机相关值,但是我在努力研究如何使用这些值来创建一个“运行计数”#39;实际资产价格。所以我有一个看起来像这样的DataFrame:

    abc         xyz         def
0   0.093889    0.113750    0.082923
1   -0.130293   -0.148742   -0.061890
2   0.062175    -0.005463   0.022963
3   -0.029041   -0.015918   0.006735
4   -0.048950   -0.010945   -0.034421
5   0.082868    0.080570    0.074637
6   0.048782    -0.030702   -0.003748
7   -0.027402   -0.065221   -0.054764
8   0.095154    0.063978    0.039480
9   0.059001    0.114566    0.056582

我怎样才能创建这样的东西,其中abc_px =之前的价格*(1 + abc)。我知道我可以迭代,但我不想出于性能原因。

类似的,假设所有这些的初始价格是100:

abc             xyz         def          abc_px      xyz_px      def_px 
0   0.093889    0.11375     0.082923     109.39      111.38      108.29 
1   -0.130293   -0.148742   -0.06189     95.14       94.81       101.59 
2   0.062175    -0.005463   0.022963     101.05      94.29       103.92 
3   -0.029041   -0.015918   0.006735     98.12       92.79       104.62 
4   -0.04895    -0.010945   -0.034421    93.31       91.77       101.02 
5   0.082868    0.08057 0.074637     101.05          99.17       108.56 
6   0.048782    -0.030702   -0.003748    105.98      96.12       108.15 
7   -0.027402   -0.065221   -0.054764    103.07      89.85       102.23 
8   0.095154    0.063978    0.03948  112.88          95.60       106.27 
9   0.059001    0.114566    0.056582     119.54      106.56      112.28 

1 个答案:

答案 0 :(得分:1)

这就是你想要的吗?

In [131]: new = df.add_suffix('_px') + 1

In [132]: new
Out[132]:
     abc_px    xyz_px    def_px
0  1.093889  1.113750  1.082923
1  0.869707  0.851258  0.938110
2  1.062175  0.994537  1.022963
3  0.970959  0.984082  1.006735
4  0.951050  0.989055  0.965579
5  1.082868  1.080570  1.074637
6  1.048782  0.969298  0.996252
7  0.972598  0.934779  0.945236
8  1.095154  1.063978  1.039480
9  1.059001  1.114566  1.056582

In [133]: df.join(new.cumprod() * 100)
Out[133]:
        abc       xyz       def      abc_px      xyz_px      def_px
0  0.093889  0.113750  0.082923  109.388900  111.375000  108.292300
1 -0.130293 -0.148742 -0.061890   95.136292   94.808860  101.590090
2  0.062175 -0.005463  0.022963  101.051391   94.290919  103.922903
3 -0.029041 -0.015918  0.006735   98.116758   92.789996  104.622824
4 -0.048950 -0.010945 -0.034421   93.313942   91.774410  101.021601
5  0.082868  0.080570  0.074637  101.046682   99.168674  108.561551
6  0.048782 -0.030702 -0.003748  105.975941   96.123997  108.154662
7 -0.027402 -0.065221 -0.054764  103.071989   89.854694  102.231680
8  0.095154  0.063978  0.039480  112.879701   95.603418  106.267787
9  0.059001  0.114566  0.056582  119.539716  106.556319  112.280631