Calculate Daily Returns with Pandas DataFrame

前端 未结 3 1715
不思量自难忘°
不思量自难忘° 2021-01-31 18:41

Here is my Pandas data frame:

prices = pandas.DataFrame([1035.23, 1032.47, 1011.78, 1010.59, 1016.03, 1007.95, 
              1022.75, 1021.52, 1026.11, 1027.04,         


        
3条回答
  •  -上瘾入骨i
    2021-01-31 19:11

    Just a bit of complement to @YaOzl 's answer, and in case if someone would read this. If your return data is a panel spreadsheet with several stocks:

    >>> prices = pandas.DataFrame(
    {"StkCode":["StockA","StockA","StockA","StockA","StockA","StockB","StockB","StockB","StockB","StockB","StockC","StockC","StockC","StockC","StockC",], 
    "Price":[1035.23, 1032.47, 1011.78, 1010.59, 1016.03, 1007.95, 1022.75, 1021.52, 1026.11, 1027.04, 1030.58, 1030.42, 1036.24, 1015.00, 1015.20]}
    )
    

    Which gives you:

          Price StkCode
    0   1035.23  StockA
    1   1032.47  StockA
    2   1011.78  StockA
    3   1010.59  StockA
    4   1016.03  StockA
    5   1007.95  StockB
    6   1022.75  StockB
    7   1021.52  StockB
    8   1026.11  StockB
    9   1027.04  StockB
    10  1030.58  StockC
    11  1030.42  StockC
    12  1036.24  StockC
    13  1015.00  StockC
    14  1015.20  StockC
    

    Then you could simply jointly use .pct_change(k) with .groupby(StkCode). And it is thound times faster than using an iterator...(I tried on my dataset, successfully shrink the process time from 10 hrs to 20 seconds!!)

    >>> prices["Return"] = prices.groupby("StkCode")["Price"].pct_change(1)
    

    Gives you:

          Price StkCode    Return
    0   1035.23  StockA       NaN
    1   1032.47  StockA -0.002666
    2   1011.78  StockA -0.020039
    3   1010.59  StockA -0.001176
    4   1016.03  StockA  0.005383
    5   1007.95  StockB       NaN
    6   1022.75  StockB  0.014683
    7   1021.52  StockB -0.001203
    8   1026.11  StockB  0.004493
    9   1027.04  StockB  0.000906
    10  1030.58  StockC       NaN
    11  1030.42  StockC -0.000155
    12  1036.24  StockC  0.005648
    13  1015.00  StockC -0.020497
    14  1015.20  StockC  0.000197
    

提交回复
热议问题