如何识别pandas python中的列值变化

我有一个如下所示的 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

我对熊猫很陌生,想不出如何实现这一点。有人可以帮我解决这个问题吗?


慕虎7371278
浏览 252回答 1
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_timeindex                           1       20180903    09:16       11700       283.90      274.05      20180903.0  14:32317     20180903    14:33       11600       295.35      284.50      20180904.0  09:31391     20180904    09:32       11500       304.15      301.60      20180904.0  09:44404     20180904    09:45       11600       282.40      282.40      20180904.0  09:45405     20180904    09:46       11500       300.35      301.30      20180904.0  09:49409     20180904    09:50       11600       280.40      279.25      20180904.0  10:55475     20180904    10:56       11500       300.15      NaN         NaN         NaN
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python