我尝试在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 [“累计退货”] = np.其中(df [“月末”] == 1,1,df [“退货”].groupby(“ID 1”).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')
非常感谢!
2条答案
按热度按时间nlejzf6q1#
IIUC用途:
hyrbngr72#
看起来您想要:
输出: