[英]numbering elements in a pandas dataframe
我正在嘗試建立一個以熊貓為單位的小型股票交易報告。 由於后續的買賣,它變得有點復雜。 假設我在一個數據框中進行買賣:
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
我正在嘗試將交易分組,直到下一次總和= = 0。 然后,我可以遍歷分組以進行進一步的分析(例如,查看這是一次成功的交易還是失敗的交易,從首次購買到最后一次交易之間的#天等),並且我可以看到在這種情況下存在一個未結頭寸時刻(如果累計值的最后一個值= 0)。
有人可以給我提示我如何實現分組嗎?
謝謝
Series.cumsum()
是,一種解決方案是在名為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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.