熊猫:将年度累计值转换为季度数据

时间:2019-11-28 15:43:47

标签: python pandas

数据框包含一年中每个名称的累计价值测量总和。一年结束后,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] })

1 个答案:

答案 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