Вычитание в Python кадре данных, но с логикой - PullRequest
0 голосов
/ 07 августа 2020
• 1000
Example 100-2=98
then 98-4=94
then 94-1=93 and so on

Что я пробовал:

Я пытался использовать скользящее среднее, но это не сработало, я пытался использовать al oop, но не понимал, как передать индекс 6 в l oop, поскольку l oop начинает работать с индекса 0 для вычитания, но я хочу его с индекса 6. Я также пробовал некоторые функции pandas, которые также не работают

Ответы [ 2 ]

0 голосов
/ 07 августа 2020

IIU C, можно так:

ff['Output2'] = ff.loc[(ff['Input'] == 100).cummax(), 'Input'].cumsum().mul(-1).add(200)
ff['Output2'] = ff['Output2'].fillna(ff['Input'])

Вывод:

    Input  Output  Output2
0       0       0      0.0
1      50      50     50.0
2       0       0      0.0
3      49      49     49.0
4       4       4      4.0
5     100     100    100.0
6       2      98     98.0
7       4      94     94.0
8       1      93     93.0
9       5      88     88.0
10      6      82     82.0
11      3      79     79.0
12      2      77     77.0

Может немного иначе:

m = ff['Input'].eq(100).cummax()
ff['Output3'] = ff['Input'].mask(m, 200 - ff.loc[m, 'Input'].cumsum())

Вывод:

    Input  Output  Output2  Output3
0       0       0      0.0        0
1      50      50     50.0       50
2       0       0      0.0        0
3      49      49     49.0       49
4       4       4      4.0        4
5     100     100    100.0      100
6       2      98     98.0       98
7       4      94     94.0       94
8       1      93     93.0       93
9       5      88     88.0       88
10      6      82     82.0       82
11      3      79     79.0       79
12      2      77     77.0       77

Просто показаны три разных результата: ваш ожидаемый, мой первый расчет и второй расчет.

0 голосов
/ 07 августа 2020
ff = pd.DataFrame({'Input':[0,50,0,49,4,100,2,4,1,5,6,3,2]})
ff['Output'] = ff.Input 
ff.iloc[6:, 1] = 100 - ff.iloc[6:, 0].cumsum()
...