【发布时间】:2020-07-03 17:38:28
【问题描述】:
我想对一列进行求和,但求和前每一行的值必须与另一列的值进行检查,如果另一列的值较小,则该值相加而不是第一列的前一行.考虑这个数据框:
df = pd.DataFrame({'X': [0,1,0,1,1,0,0,0,0,1,1,1,0,1], 'Y': [0, 0, 1, 1, 1, 2, 3, 4, 4, 4, 4, 4, 5, 5]})
X Y
0 0 0
1 1 0
2 0 1
3 1 1
4 1 1
5 0 2
6 0 3
7 0 4
8 0 4
9 1 4
10 1 4
11 1 4
12 0 5
13 1 5
现在,我想对 X 求和,但是如果 Y 小于上一行中的 X,它会加起来而不是 X。例如,X 的第二行的 cumsum 结果是 1 但因为第二行是 0 Y的行小于1,我们替换它。那么第三行的 cumsum 将是 0 而不是 1。 我使用“for循环”编写代码如下,但对于大型数据集它根本没有效率:
df['Z'] = 0
for index in range(1,len(df)):
df.loc[index, 'Z'] = min(df.loc[index, 'X']+df.loc[index-1, 'Z'], df.loc[index, 'Y'])
Z 的预期结果是:
X Y Z
0 0 0 0
1 1 0 0
2 0 1 0
3 1 1 1
4 1 1 1
5 0 2 1
6 0 3 1
7 0 4 1
8 0 4 1
9 1 4 2
10 1 4 3
11 1 4 4
12 0 5 4
13 1 5 5
如果有人能提出更有效的方法,我将不胜感激。
【问题讨论】:
标签: python pandas conditional-statements cumsum