Я пытаюсь поместить условие в один из столбцов в Пандасе, и исходя из этого условия, я хочу взять кумулятивную сумму другого столбца в Фрейме данных.Чтобы быть более понятным, вот пример: предположим, что мой DataFrame df
как:
+-----------+--------------+-----+-------------+
| Date | daily_return | dir | size_return |
+-----------+--------------+-----+-------------+
| 2/25/2015 | -0.000681 | -1 | -0.000681 |
| 2/26/2015 | -0.0015 | -1 | -0.00218 |
| 2/27/2015 | -0.003022 | -1 | -0.005203 |
| 3/2/2015 | 0.005776 | 1 | 0.005776 |
| 3/3/2015 | -0.003772 | -1 | -0.003772 |
| 3/4/2015 | -0.00436 | -1 | -0.00755 |
+-----------+--------------+-----+-------------+
Я поместил условие в столбец dir
, пока значение в dir
равноdir.shift(1)
Я хочу взять кумулятивную сумму столбца daily_return
, пока dir
не станет равным dir.shift(1)
, а когда они не будут равны, я хочу, чтобы daily_return
равнялся size_return
.Код, который я использовал для генерации таблицы выше, выглядит следующим образом:
df['size_return'] = np.where(df.dir == df.dir.shift(1),
df.daily_return.cumsum(axis=0), df.daily_return)
Проблема с таблицей выше состоит в том, что я не могу понять, почему в последних двух строках суммируется с использованиемВыше строки кода daily_return
результат -0.00755
, я должен получить -0.00813
(-0.003772 + -0.00436
).
В моей логике, написанной в приведенном выше коде, должна быть ошибка, яне могу понять мою ошибку?
Во-вторых, я не хочу, чтобы значение в каждой строке size_return
было только последней строкой отфильтрованного фрейма данных на основе условия.Чтобы быть более понятным, вот как должен выглядеть финальный стол:
+-----------+--------------+-----+-------------+
| Date | daily_return | dir | size_return |
+-----------+--------------+-----+-------------+
| 2/25/2015 | -0.000681 | -1 | |
| 2/26/2015 | -0.0015 | -1 | |
| 2/27/2015 | -0.003022 | -1 | -0.005203 |
| 3/2/2015 | 0.005776 | 1 | 0.005776 |
| 3/3/2015 | -0.003772 | -1 | |
| 3/4/2015 | -0.00436 | -1 | -0.008132 |
+-----------+--------------+-----+-------------+