我有一系列日期和累积值的熊猫,如下所示:
'2015-01-01': 1
'2015-01-02': 3
'2015-01-03': 7
'2015-01-04': 8
我可以像这样用熊猫将它们转换成“三角洲”吗?
'2015-01-01': 0
'2015-01-02': 2
'2015-01-03': 4
'2015-01-04': 1
还是我应该手动进行?
您可以致电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
与向量化的前两个方法相比,最后一个示例显示每行循环的速度要慢得多(我使用了double[[]]
强制其返回数据帧,以便我可以axis=1
逐行传递应用lambda函数的param )。始终寻求矢量化方法,以充分利用更快的操作优势。
因此,您可以在此处看到,这diff
比循环遍历每一行快约4000倍,因为它是矢量化的,因此扩展性要比非矢量化的方法好得多。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句