Python、Pandas。从累积值转换为增量
Python, Pandas. Converting from cumulative values to deltas
我有一个 pandas 系列的日期和累积值,如下所示:
'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
还是我应该手动完成?
直接调用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
,这是一个更通用的操作,即 returns 一个系列移动一个句点(同样默认为 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
最后一个例子显示了在每一行上循环有多慢(我使用了双 [[]]
强制它到 return 一个数据帧,所以我可以传递参数 axis=1
与向量化的前两种方法相比,它逐行应用 lambda 函数。始终寻求一种矢量化方法来利用明显更快的操作。
所以你可以在这里看到 diff
比在每一行上循环快 4000 倍,因为它是矢量化的,它将比非矢量化方法更好地扩展。
我有一个 pandas 系列的日期和累积值,如下所示:
'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
还是我应该手动完成?
直接调用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
,这是一个更通用的操作,即 returns 一个系列移动一个句点(同样默认为 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
最后一个例子显示了在每一行上循环有多慢(我使用了双 [[]]
强制它到 return 一个数据帧,所以我可以传递参数 axis=1
与向量化的前两种方法相比,它逐行应用 lambda 函数。始终寻求一种矢量化方法来利用明显更快的操作。
所以你可以在这里看到 diff
比在每一行上循环快 4000 倍,因为它是矢量化的,它将比非矢量化方法更好地扩展。