python pandas获得一年的第一个可用数据点/计算YTD回报

时间:2015-05-31 21:03:03

标签: python pandas

我需要计算给定数据集的年初至今相对回报。我通常用这个简单的函数计算累积相对回报:

def RelPerf(price):
    RelPerf = (price/price[0])
    return RelPerf  

问题在于,我需要在每年年初(第一个可用的年度数据点)设置价格而不是“price [0]”。由于数据集不包含一年中每一天的数据,因此我不能简单地使用类似+ 365的数据。所以问题是我如何动态地将第一个可用数据点的位置放入公式中?

这是所用数据框的简短示例:

              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

2 个答案:

答案 0 :(得分:0)

将df用于数据帧

使用TimeGrouper对数据进行分组,以按年份分组 GroupedDat = df.groupby(pd.TimeGrouper('A'))

使用应用于我们组数据的转换lambda函数,创建一个YTD数据调整为close的新列。

df["YTD"] = GroupedDat['CLOSE_SPX'].transform(lambda x: x/x.iloc[0]-1.0)

解决方案由MarkD提供:https://quant.stackexchange.com/questions/18085/calculate-ytd-return-find-first-available-datapoint-of-a-year-in-python

答案 1 :(得分:0)

我得到了每小时的数据,发现使用以下命令更容易找到它:

<GoogleMap onClick={(value) => {
  this.setState({ polygonEditable: false });
  props.map_data.getClassName(value)
}} defaultZoom={9} defaultCenter={props.locationCoords} defaultOptions={{ gestureHandling: "greedy" }}>
  <Polygon
    paths={props.reversedCoords}
    onClick={e => this.setState({ polygonEditable: true })}
    // geodesic={true}
    options={{
      fillColor: `#ff0000`,
      fillOpacity: 0.7,
      strokeColor: '#47a4fa',
      strokeOpacity: 0.7,
      strokeWeight: 3,
      clickable: true,
      editable: this.state.polygonEditable,
      zIndex: -1,
      geodesic: false
    }}
  />
</GoogleMap>

也许这可以帮助正在通过搜索功能寻找解决方案的人