python pandas get first available datapoint of a year / calculate YTD return -
i need calculate year-to-date relative return of given dataset. caculate cumulative relative return simple function:
def relperf(price): relperf = (price/price[0]) return relperf
the problem ist need set instead of "price[0]" price start of each year (first available datapoint of year). since dataset not contain data each day of year can't use sth +365. question how dynamically location of first available datapoint formula?
this short example of dataframe used:
close_spx close_iboxx a_returns b_returns a_vola b_vola 2014-05-15 1870.85 234.3017 -0.009362 0.003412 0.170535 0.075468 2014-05-16 1877.86 234.0216 0.003747 -0.001195 0.170153 0.075378 2014-05-19 1885.08 233.7717 0.003845 -0.001068 0.170059 0.075384 2014-05-20 1872.83 234.2596 -0.006498 0.002087 0.170135 0.075410 2014-05-21 1888.03 233.9101 0.008116 -0.001492 0.169560 0.075326 2014-05-22 1892.49 233.5429 0.002362 -0.001570 0.169370 0.075341 2014-05-23 1900.53 233.8605 0.004248 0.001360 0.168716 0.075333 2014-05-27 1911.91 234.0368 0.005988 0.000754 0.168797 0.075294 2014-05-28 1909.78 235.4454 -0.001114 0.006019 0.168805 0.075474 2014-05-29 1920.03 235.1813 0.005367 -0.001122 0.168866 0.075451 2014-05-30 1923.57 235.2161 0.001844 0.000148 0.168844 0.075430 2014-06-02 1924.97 233.8868 0.000728 -0.005651 0.168528 0.075641 2014-06-03 1924.24 232.9049 -0.000379 -0.004198 0.167852 0.075267
use df dataframe
group data timegrouper things grouped year groupeddat = df.groupby(pd.timegrouper('a'))
create new column ytd data of adjusted close, using transformation lambda function applied our group data.
df["ytd"] = groupeddat['close_spx'].transform(lambda x: x/x.iloc[0]-1.0)
solution provided markd: https://quant.stackexchange.com/questions/18085/calculate-ytd-return-find-first-available-datapoint-of-a-year-in-python
Comments
Post a Comment