使用 groupby 滚动年初至今的百分比变化
Rolling Year to Date percentage change with groupby
我有一个大数据框。您将在下面找到它的摘录:
lst=[['31122020','A',12],['31012021','A',14],['28022021','A',15],['31032021','A',17]]
df2=pd.DataFrame(lst, columns=['Date','FN','AuM'])
我想计算列 AuM
的年初至今 (YTD)。新列应如下所示:
lst=[['31122020','A',12,'NaN'],['31012021','A',14,0.167],['28022021','A',15,0.25],['31032021','A',17,0.417]]
df2=pd.DataFrame(lst, columns=['Date','FN','AuM','AuM_YTD_%Change'])
你知道有什么pandas功能可以达到我的目标吗?
您可以为一年内的日期创建掩码,然后使用 diff
+ cumsum
进行更改,使用 div
进行更改:
df2['Date'] = pd.to_datetime(df2['Date'], format='%d%m%Y')
msk = df2['Date'] < df2.loc[0, 'Date'] + pd.to_timedelta(365, unit='D')
df2['AuM_YTD_%Change'] = df2.loc[msk, 'AuM'].diff().cumsum().div(df2.loc[0,'AuM'])
输出:
Date FN AuM AuM_YTD_%Change
0 2020-12-31 A 12 NaN
1 2021-01-31 A 14 0.166667
2 2021-02-28 A 15 0.250000
3 2021-03-31 A 17 0.416667
我有一个大数据框。您将在下面找到它的摘录:
lst=[['31122020','A',12],['31012021','A',14],['28022021','A',15],['31032021','A',17]]
df2=pd.DataFrame(lst, columns=['Date','FN','AuM'])
我想计算列 AuM
的年初至今 (YTD)。新列应如下所示:
lst=[['31122020','A',12,'NaN'],['31012021','A',14,0.167],['28022021','A',15,0.25],['31032021','A',17,0.417]]
df2=pd.DataFrame(lst, columns=['Date','FN','AuM','AuM_YTD_%Change'])
你知道有什么pandas功能可以达到我的目标吗?
您可以为一年内的日期创建掩码,然后使用 diff
+ cumsum
进行更改,使用 div
进行更改:
df2['Date'] = pd.to_datetime(df2['Date'], format='%d%m%Y')
msk = df2['Date'] < df2.loc[0, 'Date'] + pd.to_timedelta(365, unit='D')
df2['AuM_YTD_%Change'] = df2.loc[msk, 'AuM'].diff().cumsum().div(df2.loc[0,'AuM'])
输出:
Date FN AuM AuM_YTD_%Change
0 2020-12-31 A 12 NaN
1 2021-01-31 A 14 0.166667
2 2021-02-28 A 15 0.250000
3 2021-03-31 A 17 0.416667