mic*_*ard 5 python vectorization pandas
我需要生成一个以初始值开头的列,然后由包含该列的过去值的函数生成.例如
df = pd.DataFrame({'a': [1,1,5,2,7,8,16,16,16]})
df['b'] = 0
df.ix[0, 'b'] = 1
df
a b
0 1 1
1 1 0
2 5 0
3 2 0
4 7 0
5 8 0
6 16 0
7 16 0
8 16 0
Run Code Online (Sandbox Code Playgroud)
现在,我想通过获取前一行的最小值并添加两行来生成列'b'的其余部分.一个解决方案是
for i in range(1, len(df)):
df.ix[i, 'b'] = df.ix[i-1, :].min() + 2
Run Code Online (Sandbox Code Playgroud)
产生了所需的输出
a b
0 1 1
1 1 3
2 5 3
3 2 5
4 7 4
5 8 6
6 16 8
7 16 10
8 16 12
Run Code Online (Sandbox Code Playgroud)
大熊猫有"干净"的方法吗?优选地,可以对计算进行矢量化?
pandas没有很好的方法来处理一般的递归计算.可能有一些技巧可以对它进行矢量化,但是如果你可以采用依赖性,那么它相对无痛且非常快numba.
@numba.njit
def make_b(a):
b = np.zeros_like(a)
b[0] = 1
for i in range(1, len(a)):
b[i] = min(b[i-1], a[i-1]) + 2
return b
df['b'] = make_b(df['a'].values)
df
Out[73]:
a b
0 1 1
1 1 3
2 5 3
3 2 5
4 7 4
5 8 6
6 16 8
7 16 10
8 16 12
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |