微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 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

现在,我想通过获取前一行的最小值并添加两行来生成列’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] 举报,一经查实,本站将立刻删除。

相关推荐