在Python中按年计算最大跌幅

时间:2019-09-28 11:33:41

标签: python pandas

我有一个收盘价系列的股票。我想计算最大跌幅,但是每年。

Date
1995-12-11     1.204
1995-12-12     1.184
1995-12-13     1.196
1995-12-14     1.192
1995-12-15     1.099
1995-12-18     1.005
...
2018-12-18     22.005

我用它来计算MDD:

drawdown =   close / close.cummax()

1 个答案:

答案 0 :(得分:0)

只要具有df.groupby('year').close.transform('cummax')列,您应该可以使用类似year的方法来计算累积最大值。这样会创建一系列与数据框中其他列长度相同的长度,因此您可以轻松地用收盘价除以收盘价。

如果只有日期作为字符串,而收盘价在名为close的列中,则可以执行以下操作:

df\
    .assign(year = lambda x: pd.to_datetime(x.date).dt.year)\
    .assign(close_cummax = lambda x: x.groupby('year').close.transform('cummax'))\
    .assign(mdd = lambda x: x.close/x.close_cummax)

我在上面使用链式方法,但是如果您不喜欢代码中充斥着lambda函数,则可以为每个更改使用单独的语句:

df['year'] = pd.to_datetime(df.date).dt.year
df['mdd'] = df.close / df.groupby('year').close.transform('cummax')