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

xpa*_*nta 4 python time-series pandas

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

'2015-01-01': 1
'2015-01-02': 3
'2015-01-03': 7
'2015-01-04': 8
Run Code Online (Sandbox Code Playgroud)

我可以使用pandas将它们转换为"deltas"吗?

'2015-01-01': 0   
'2015-01-02': 2
'2015-01-03': 4
'2015-01-04': 1
Run Code Online (Sandbox Code Playgroud)

或者我应该手动完成?

EdC*_*ica 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
Run Code Online (Sandbox Code Playgroud)

您还可以使用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
Run Code Online (Sandbox Code Playgroud)

最后一个例子显示了每行上循环的速度有多慢(我使用了一个double [[]]来强制它返回一个数据帧,因此我可以传递param axis=1,它会逐行地应用lambda函数),而前两个方法是矢量化的.始终寻求矢量化方法以利用明显更快的操作.

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