Python,熊猫。从累积值转换为增量值

时间:2015-01-24 20:04:50

标签: python pandas time-series

我有一个大熊猫系列的日期和累积值,如下所示:

'2015-01-01': 1
'2015-01-02': 3
'2015-01-03': 7
'2015-01-04': 8

我可以使用pandas将它们转换为" deltas"像这样?

'2015-01-01': 0   
'2015-01-02': 2
'2015-01-03': 4
'2015-01-04': 1

或者我应该手动完成吗?

1 个答案:

答案 0 :(得分:5)

您只需拨打diff,默认时间段为1

In [21]:

df['diff'] = df['Cumulative_Value'].diff()
df
Out[21]:
       Dates  Cumulative_Value  diff
0 2015-01-01                 1   NaN
1 2015-01-02                 3     2
2 2015-01-03                 7     4
3 2015-01-04                 8     1

你也可以使用shift这是一个更通用的操作,它返回一个移动一个句点的系列(同样默认值是1),在这种情况下虽然在这个大小的数据集上它更慢:

In [25]:

%timeit df['Cumulative_Value'].diff()
%timeit df['Cumulative_Value'] - df['Cumulative_Value'].shift()
%timeit df[['Cumulative_Value']].apply(lambda x: x - x.shift(), axis=1)
10000 loops, best of 3: 109 µs per loop
1000 loops, best of 3: 330 µs per loop
100 loops, best of 3: 4.02 ms per loop

最后一个示例显示每行循环的速度有多慢(我使用了双[[]]强制它返回数据帧,因此我可以传递应用lambda的param axis=1与前两个被矢量化的方法相比,行方式)。始终寻求矢量化方法以利用明显更快的操作。

所以你可以看到diff比每行循环快约4000倍,因为它是矢量化的,它比非矢量化方法的扩展要好得多。