python-按组计算熊猫的同比增长

我有以下数据框:

In [1]: df
Out[1]: 

ID            Month           Transaction_Amount

1             2013/01         10
1             2013/02         20
1             2013/03         10
1             2013/04         20
1             2013/05         10
1             2013/06         20
1             2013/07         10
1             2013/08         20
1             2013/09         10
1             2013/10         20
1             2013/11         10
1             2013/12         20
1             2014/01         15
1             2014/02         25
1             2014/03         15
1             2014/04         25
...
1             2014/11         15
1             2014/12         25
...
10000000      2014/11         13
10000000      2014/12         23

我想做的是计算滚动月份的逐年增长,因此,例如,我想找到(2014/01-2013/01)/(2014/01)的值,即(15- 10)/(15)= 1/3并将其保存在第一个滚动周期中.每个ID总共有12个滚动周期.我认为最终输出应如下所示:

In [2]: df_new
Out[2]: 

ID       rolling_period_1   rolling_period_2  ... rolling_period_12

1        .333333            .25                   .25
2        x1                 x2                    x12
3        y1                 y2                    y12
4        z1                 z2                    z12
...

我生成了一个包含期间[(2013/01,2014/01),(2013/02,2014/02)…(2013/12,2014/12)]每年的元组的列表,并且一直在玩isin可以索引原始df的子集,但是我不确定如何到达df_new.

编辑

我使用以下代码创建了一个名为temp_df的新数据框:

In [4]: temp_df = df[df['month'].isin(('2013/01','2014/01'))]

In [5]: temp_df
Out[5]:

ID            Month           Transaction_Amount

1             2013/01         10
1             2014/01         15
2             2013/01         20
2             2014/01         30
3             2013/01         15
3             2014/01         30
...

我想产生的是一个类似于以下内容的DataFrame:

In [6]: new_df
Out[6]:

ID            Transaction_Growth

1             .3333   # (15-10)/15
2             .3333   # (30-20)/30
3             .50     # (30-15)/30
...

解决方法:

您可以使用shift偏移数据框中的行.

使用月份列和值列创建虚拟数据

rng = pd.date_range('1/1/2011', periods=90, freq='M')
df = pd.DataFrame({'value':range(1,91),'date':rng})

将月份列设置为索引

df = df.set_index('date')

将数据框的副本移位12个周期,以获取12个月前的值(减去当前记录的值),然后除以当前记录:

df - df.shift(12)/ df

在移位功能中更新周期上的符号

更新以考虑ID

# Create range of months
rng = pd.date_range('1/1/2011', periods=180, freq='M')
ID = np.array([1,2,3])

# Create ID column
ID = np.repeat(ID,60)

# Create dummy data in dataframe
df = pd.DataFrame({'ID':ID,'value':range(1,181),'date':rng})

# Use shift on a group by object
(df.value - df.groupby(['ID']).value.shift(12))/ df.value
上一篇:python-使用App Engine单元测试自动生成索引


下一篇:numpy索引倒置