我有一个包含日期、%每日回报、%CumRetn的数据框。
我需要一个Python代码来计算%每周回报,每周重置为零,并每年每周累积增加/减少 累积月度和季度回报也是如此
我知道如何进行重新采样(“W”或“M”或“Q”),但这不是我想要的。我正在使用 python 代码寻找一段时间 = 周/月/季度的 dagged-ramp 向上/向下
import pandas as pd
# 创建示例数据
df = pd.DataFrame({
'Date': pd.to_datetime(['2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05', '2023-01-06',
'2023-01-09', '2023-01-10', '2023-01-11', '2023-01-12', '2023-01-13',
'2023-01-16', '2023-01-17', '2023-01-18', '2023-01-19', '2023-01-20']),
'% Daily Return': [0.01, 0.02, -0.01, 0.03, -0.02,
0.015, -0.01, 0.025, -0.005, 0.01,
0.014, -0.02, 0.03, -0.01, 0.02]
})
# 计算累积回报
df['% CumRetn'] = (1 + df['% Daily Return']).cumprod() - 1
# 计算每周回报
df['Weekly Return'] = df['% Daily Return'].groupby(pd.Grouper(key='Date', freq='W')).cumsum()
# 计算每周累积回报
df['Cumulative Weekly Return'] = (1 + df['Weekly Return']).groupby(pd.Grouper(key='Date', freq='W')).cumprod() - 1
# 计算每月回报
df['Monthly Return'] = df['% Daily Return'].groupby(pd.Grouper(key='Date', freq='M')).cumsum()
# 计算每月累积回报
df['Cumulative Monthly Return'] = (1 + df['Monthly Return']).groupby(pd.Grouper(key='Date', freq='M')).cumprod() - 1
# 计算每季度回报
df['Quarterly Return'] = df['% Daily Return'].groupby(pd.Grouper(key='Date', freq='Q')).cumsum()
# 计算每季度累积回报
df['Cumulative Quarterly Return'] = (1 + df['Quarterly Return']).groupby(pd.Grouper(key='Date', freq='Q')).cumprod() - 1
# 打印数据框
print(df)
这将创建一个包含每日回报、累积每日回报、每周回报、每周累积回报、每月回报、每月累积回报、每季度回报和每季度累积回报的列的 DataFrame。
解释:
-
按频率分组: 我们使用
pd.Grouper(key='Date', freq='W')
将数据按周、pd.Grouper(key='Date', freq='M')
按月和pd.Grouper(key='Date', freq='Q')
按季度分组。 -
使用
cumsum()
计算回报: 我们使用cumsum()
函数计算每组中的累积回报。这将为该周/月/季度的每一天提供到目前为止的总回报。 -
使用
cumprod()
计算累积回报: 我们使用cumprod()
函数计算每组中的累积回报。这将为该周/月/季度的每一天提供总的累积回报。
这应该可以为提供正在寻找的 dagged-ramp 向上/向下累积回报。
标签:python From: 78814116