<p>我将df复制到df2,以保留原始数据。
我建议你把任务分成两步:</p>
<pre><code>#change everything
df2['output'] = df.groupby('ownerId')['value'].cumsum()
#check and update if it applies
df2['output'] = np.where((df2['endId']<= df['startId']),
df2['value'], #copy value from
df2['output']) #place value into
print(df2)
id endId startId ownerId value output
0 1 50 50 10 105 105
1 2 51 50 10 240 345
2 3 52 50 10 420 765
3 4 53 53 10 470 470
4 5 40 40 11 320 320
5 6 41 40 11 18 338
6 7 55 55 12 50 50
7 8 57 55 12 412 462
8 9 59 55 12 398 860
9 10 60 57 12 320 1180
</code></pre>
<p>打印逻辑:</p>
<p><a href="https://i.stack.imgur.com/V6Uyt.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/V6Uyt.png" alt="enter image description here"/></a></p>
<p>我很抱歉,但我还是不明白。
对于ownerId 10和11,endId和startId共享相同值的记录将在累计和上计数。
看起来还可以。但出于某种原因,你说同样的规则不适用于OwnerID12。
我知道应该考虑7到10的身份证。模式似乎是当endId和startId
匹配最高值,它发生在ID4上。你知道吗</p>