我需要生成一个以初始值开头的列,然后由包含该列的过去值的函数生成.例如
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
现在,我想通过获取前一行的最小值并添加两行来生成列’b’的其余部分.一个解决方案是
for i in range(1, len(df)):
df.ix[i, 'b'] = df.ix[i-1, :].min() + 2
产生了所需的输出
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
大熊猫有“干净”的方法吗?优选地,可以对计算进行矢量化?
解决方法:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。