我有一个如下所示的pandas DataFrame,其中包含strike_price和value的数据。
date time int_sp value
1 20180903 09:16 11700 283.90
315 20180903 14:31 11700 273.85
316 20180903 14:32 11700 274.05
317 20180903 14:33 11600 295.35
390 20180904 09:31 11600 284.5
391 20180904 09:32 11500 304.15
403 20180904 09:44 11500 301.6
404 20180904 09:45 11600 282.4
405 20180904 09:46 11500 300.35
406 20180904 09:47 11500 300.35
407 20180904 09:48 11500 300.95
408 20180904 09:49 11500 301.3
409 20180904 09:50 11600 280.4
474 20180904 10:55 11600 279.25
475 20180904 10:56 11500 300.15
我的第一笔交易应该始终是第一笔记录的卖出。现在,每当行使价(int_sp)发生变化时,我都需要购买已卖出的头寸并通过以新的行使价进行卖出来建立新的交易。
这是我的预期输出。
sell_date sell_time buy_date buy_time int_sp sell_price buy_price
20180903 09:16 20180903 14:32 11700 283.90 274.05
20180903 14:33 20180904 09:31 11600 295.35 284.5
20180904 09:32 20180904 09:44 11500 304.15 301.6
20180904 09:45 20180904 09:45 11600 282.4 282.4
20180904 09:46 20180904 09:49 11500 300.35 301.3
20180904 09:50 20180904 10:55 11600 280.4 279.25
20180904 10:56 TBD TBD 11500 300.15 TBD
我对熊猫很陌生,无法考虑如何实现这一目标。 有人可以帮我吗?
答案 0 :(得分:1)
IIUC,使用diff
获取销售信息
ndf = df.loc[df['int_sp'].diff().ne(0)].add_prefix('sell_').reset_index().copy()
现在,使用口罩
mask = df['int_sp'].diff().shift(-1).fillna(0).ne(0)
此蒙版会过滤与购买相关的滞后值。然后只需分配
ndf.loc[:, 'buy_value'] = df.loc[mask, 'value'].reset_index(drop=True)
ndf.loc[:, 'buy_date'] = df.loc[mask, 'date'].reset_index(drop=True)
ndf.loc[:, 'buy_time'] = df.loc[mask, 'time'].reset_index(drop=True)
sell_date sell_time sell_int_sp sell_value buy_value buy_date buy_time
index
1 20180903 09:16 11700 283.90 274.05 20180903.0 14:32
317 20180903 14:33 11600 295.35 284.50 20180904.0 09:31
391 20180904 09:32 11500 304.15 301.60 20180904.0 09:44
404 20180904 09:45 11600 282.40 282.40 20180904.0 09:45
405 20180904 09:46 11500 300.35 301.30 20180904.0 09:49
409 20180904 09:50 11600 280.40 279.25 20180904.0 10:55
475 20180904 10:56 11500 300.15 NaN NaN NaN