pandas数据帧中的元素编号



我正在尝试在熊猫中构建一个小型股票交易报告。由于随后的买卖,情况变得有点复杂。假设我在数据帧中进行买卖:

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(。

有人能给我一个如何实现分组的提示吗?

感谢

巧合的是,一种解决方案是在名为cumsum:的列上应用Series.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

最新更新