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

python – 累积金额和结转 – 用熊猫矢量化

我可以使用pandas.Series数学在a和b上执行以下操作而不显式循环吗?

In [38]: a = pd.Series([4, 8, 3, 6, 2])

In [39]: b = pd.Series([3, 9, 5, 5, 4])

In [40]: alist = a.tolist()
    ...: blist = b.tolist()
    ...: for i in range(len(alist)):
    ...:     diff = max(0, alist[i] - blist[i])
    ...:     try:
    ...:         alist[i + 1] = alist[i + 1] + diff
    ...:     except IndexError:
    ...:         if diff > 0:
    ...:             alist.append(diff)
    ...:     blist[i] = max(0, blist[i] - alist[i])
    ...: 

In [41]: alist
Out[41]: [4, 9, 3, 6, 3]

In [42]: blist
Out[42]: [0, 0, 2, 0, 1]

如果它大于零,我将使用a和b的差值递增a的下一个值,然后从该累积和类似的计算中减去b.

解决方法:

这是使用numpy的一种方式:

import numpy as np

a += np.maximum(0, a-b).shift().fillna(0).astype(int)
b = np.maximum(0, b - a)

print(a)

0    4
1    9
2    3
3    6
4    3
dtype: int64

print(b)

0    0
1    0
2    2
3    0
4    1
dtype: int64

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐