Сумма только если предыдущая> текущая - PullRequest
0 голосов
/ 06 ноября 2019

Проблема, с которой я столкнулся, заключается в том, что я хотел бы продолжать суммировать значения, только если предыдущее значение больше моего текущего значения. Я пытался сделать cumsum, но я не могу сделать это в зависимости от условия. Если значение меньше предыдущего, используйте это значение. Ниже показано, как выглядит мой df и чего я пытаюсь достичь. Обратите внимание, что между индексами 1 и 2 мы не делали суммирование, потому что 6000 больше, чем 1000.

timestamp       id  value
0 2019-11-04 14:00:10.432783  device1   3000
1 2019-11-04 12:20:03.946156  device1   6000
2 2019-11-04 11:19:03.946156  device1   1000
3 2019-11-04 10:19:03.946156  device1   4000
4 2019-11-04 09:19:03.946156  device2   1000
5 2019-11-04 08:19:03.946156  device2   4000


Expected 
                 timestamp       id     value       finalvalue
0 2019-11-04 14:00:10.432783  device1     3000         9000
1 2019-11-04 12:20:03.946156  device1     6000         6000
2 2019-11-04 11:19:03.946156  device1     1000         5000
3 2019-11-04 10:19:03.946156  device1     4000         4000
4 2019-11-04 09:19:03.946156  device2     1000         5000
5 2019-11-04 08:19:03.946156  device2     4000         4000

1 Ответ

0 голосов
/ 06 ноября 2019

Это можно сделать, используя groupby, с помощью diff и cumsum создайте дополнительный ключ, тогда нам просто нужно cumsum значение в обратном порядке

df['finalvalue']=df.iloc[::-1,:].groupby([df.id,df.value.diff().lt(0).cumsum()]).value.cumsum()
df
Out[208]: 
                    timestamp       id  value  finalvalue
0 2019-11-04  14:00:10.432783  device1   3000        9000
1 2019-11-04  12:20:03.946156  device1   6000        6000
2 2019-11-04  11:19:03.946156  device1   1000        5000
3 2019-11-04  10:19:03.946156  device1   4000        4000
4 2019-11-04  09:19:03.946156  device2   1000        5000
5 2019-11-04  08:19:03.946156  device2   4000        4000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...