数据框包含一年中每个名称的累计价值测量总和。一年结束后,cumsum重新开始。对于每个值,我们都有测量的开始和结束日期。
在这种情况下如何将累积度量转换为季度度量?
as_is和to_be数据帧的可复制示例:
asis = pd.DataFrame({
'name':np.repeat( ['name_1','name_2'], 8 ),
'startdate':np.repeat(['2017-01-01', '2018-01-01','2017-01-01', '2018-01-01'], 4 ),
'enddate':np.tile( pd.date_range('1/1/2017', periods=16, freq='Q'), 1 ),
'value': [1,2,3,4,1,2,3,4,3,6,9,12,3,6,9,12] })
tobe = pd.DataFrame({
'name':np.repeat( ['name_1','name_2'], 8 ),
'startdate':np.tile( pd.date_range('1/1/2017', periods=16, freq='Q')-1, 1 ),
'enddate':np.tile( pd.date_range('1/1/2017', periods=16, freq='Q'), 1 ),
'value': [1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3] })
答案 0 :(得分:1)
我认为您想要groupby.diff
:
(asis.groupby(['name','startdate'])
['value'].diff() # substract by the previous cumsum
.fillna(asis['value']) # fill the first quarters
)
输出:
0 1.0
1 1.0
2 1.0
3 1.0
4 1.0
5 1.0
6 1.0
7 1.0
8 3.0
9 3.0
10 3.0
11 3.0
12 3.0
13 3.0
14 3.0
15 3.0
Name: value, dtype: float64