熊猫:每隔第二行取一个差异

时间:2019-05-29 19:07:48

标签: python pandas finance

我有一个看起来像这样的数据框

                       price    signal
time                    
2017-10-28 13:54:00   293.18    buy
2017-11-02 17:13:04   285.30    sell
2017-11-02 18:40:04   283.24    buy
2017-11-03 08:40:06   291.23    sell
2017-11-03 12:38:06   294.26    buy
2017-11-05 13:33:06   296.52    sell

我想创建一个利润栏,其中填充了先前的买卖对的差价

                       price    signal   profit
time                    
2017-10-28 13:54:00   293.18    buy
2017-11-02 17:13:04   285.30    sell     -7.88
2017-11-02 18:40:04   283.24    buy
2017-11-03 08:40:06   291.23    sell      7.99
2017-11-03 12:38:06   294.26    buy
2017-11-05 13:33:06   296.52    sell      2.29

我最好怎么做?
也欢迎采用其他或更有效的方法来计算利润

2 个答案:

答案 0 :(得分:2)

IIUC使用cumsum创建组密钥,然后diff

df.groupby(df.signal.eq('buy').cumsum())['price'].diff()

答案 1 :(得分:0)

我可能会这样做:

    df['profit'] = df.price - df.price.shift()

您是否总是在平仓之前先平仓?

我建议使用trade_id列,以结清交易。