нумерация элементов в кадре данных панд - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь создать небольшую отчетность по торговле акциями в пандах.Это становится немного сложнее из-за последующих покупок и продаж.Предполагая, что у меня есть покупки и продажи в фрейме данных:

         import pandas as pd
         data = pd.read_csv("ticker1.csv", delimiter=";")
         data['cumsum']=data['quantity'].cumsum(axis=0)

         data
            Date              qty price      cumsum
         0  2018-01-20        80  20.70      80      
         1  2018-02-14        90  20.82     170      
         2  2018-02-19      -100  20.62      70     
         3  2018-02-27       -70  20.55       0     
         4  2018-03-13        30  19.80      30      
         5  2018-03-14        10  19.55      40      
         6  2018-03-30       -20  20.92      20      
         7  2018-04-01       -10  20.95      10      
         8  2018-04-10       -10  21.03       0      
         9  2018-05-04        25  19.77      25     
         10 2018-05-31       -10  20.22      15      

Таким образом, могут быть «завершенные» циклы покупки и продажи, когда cumsum = 0 (нет коротких продаж).В этом примере в конце будет открытая позиция 15.Чтобы проанализировать сделки, я хотел бы сгруппировать их следующим образом:

            Date              qty price      cumsum   group 
         0  2018-01-20        80  20.70      80       1
         1  2018-02-14        90  20.82     170       1
         2  2018-02-19      -100  20.62      70       1
         3  2018-02-27       -70  20.55       0       1
         4  2018-03-13        30  19.80      30       2
         5  2018-03-14        10  19.55      40       2
         6  2018-03-30       -20  20.92      20       2
         7  2018-04-01       -10  20.95      10       2
         8  2018-04-10       -10  21.03       0       2
         9  2018-05-04        25  19.77      25       3
         10 2018-05-31       -10  20.22      15       3

Я пытаюсь сгруппировать транзакции до следующего раза cumsum = 0.Затем я мог бы просмотреть группы для дальнейшего анализа (например, посмотреть, была ли это выигрышная или убыточная сделка, # дней между первой покупкой и последней продажей и т. Д.), И я мог бы видеть, что в этом случае есть открытая позиция вмомент (если последнее значение для cumsum! = 0).

Может, кто-нибудь подскажет, как я могу реализовать группировку?

Спасибо

1 Ответ

0 голосов
/ 24 ноября 2018

По совпадению, одним из решений является применение Series.cumsum() к столбцу с именем cumsum:

df['group'] = (df['cumsum'].shift() == 0).astype(int).cumsum() + 1
df

          Date  qty  price  cumsum  group
0   2018-01-20   80  20.70      80      1
1   2018-02-14   90  20.82     170      1
2   2018-02-19 -100  20.62      70      1
3   2018-02-27  -70  20.55       0      1
4   2018-03-13   30  19.80      30      2
5   2018-03-14   10  19.55      40      2
6   2018-03-30  -20  20.92      20      2
7   2018-04-01  -10  20.95      10      2
8   2018-04-10  -10  21.03       0      2
9   2018-05-04   25  19.77      25      3
10  2018-05-31  -10  20.22      15      3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...