【发布时间】:2023-01-23 19:36:17
【问题描述】:
我尝试在 Dataframe df 中创建一个新列 CumReturn,其中包含一个月的累计产品。我尝试在每个月末将 cum_prod() 重置为 1(如果 EndMonth == 1)并从新的累积产品开始。
df:
Date EndMonth ID1 Return
2023-01-30 0 A 0.95
2023-01-30 0 B 0.98
2023-01-31 1 A 1.01
2023-01-31 1 B 1.02
2023-02-01 0 A 1.05
2023-02-01 0 B 0.92
2023-02-02 0 A 0.97
2023-02-02 0 B 0.99
我试着用它来做: df['CumReturn'] = np.where(df['EndMonth'] == 1, 1, df['Return'].groupby('ID1').cumprod())
当我这样做时,我得到了2023-02-02整个时期的累计产品,而不仅仅是自 2 月初以来。
对于可重复性:
import pandas as pd
df1 = pd.DataFrame({
'Date':['2023-01-30', '2023-01-30', '2023-01-31', '2023-01-31', '2023-02-01', '2023-02-01', '2023-02-02', '2023-02-02'],
'EndMonth':[0, 0, 1, 1, 0, 0, 0, 0],
'ID1':['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'],
'Return':[0.95, 0.98, 1.01, 1.02, 1.05, 0.92, 0.97, 0.99]})
df1 = df1.set_index('Date')
非常感谢!
【问题讨论】:
-
为了清楚起见,您能否提供预期的输出?