为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕虎7371278 2021-09-11 10:24:43
我有一个如下所示的 Pandas DataFrame,其中包含strike_price 和 value 的数据。    date        time    int_sp          value1   20180903    09:16   11700           283.90315 20180903    14:31   11700           273.85316 20180903    14:32   11700           274.05317 20180903    14:33   11600           295.35390 20180904    09:31   11600           284.5391 20180904    09:32   11500           304.15403 20180904    09:44   11500           301.6404 20180904    09:45   11600           282.4405 20180904    09:46   11500           300.35406 20180904    09:47   11500           300.35407 20180904    09:48   11500           300.95408 20180904    09:49   11500           301.3409 20180904    09:50   11600           280.4474 20180904    10:55   11600           279.25475 20180904    10:56   11500           300.15我的第一笔交易应该总是在第一笔记录上卖出。现在,每当行使价(int_sp)发生变化时,我需要买入卖出的头寸并通过以新的行使价卖出来创建新交易。这是我的预期输出。sell_date   sell_time   buy_date    buy_time    int_sp      sell_price      buy_price20180903    09:16       20180903    14:32       11700       283.90          274.05          20180903    14:33       20180904    09:31       11600       295.35          284.520180904    09:32       20180904    09:44       11500       304.15          301.620180904    09:45       20180904    09:45       11600       282.4           282.420180904    09:46       20180904    09:49       11500       300.35          301.3   20180904    09:50       20180904    10:55       11600       280.4           279.2520180904    10:56       TBD         TBD         11500       300.15          TBD我对熊猫很陌生,想不出如何实现这一点。有人可以帮我解决这个问题吗?
查看完整描述

1 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

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


查看完整回答
反对 回复 2021-09-11
  • 1 回答
  • 0 关注
  • 216 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信