python - 如何识别pandas python中的列值变化
问题描述
我有一个如下的熊猫数据框,其中包含罢工价格和价值的数据。
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
我对熊猫很陌生,想不出如何做到这一点。有人可以帮我吗?
解决方案
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
推荐阅读
- caching - ServiceWorkers 和 Next.js:如何将生产环境中的 Service Worker 与 next.js 应用程序集成?
- rest - 我的rest api uri名称包含资源所属的模块名称的最佳方式是什么?
- javascript - 我的 javascript 如何获取 Flask Python 路由返回的 json 结果?
- anylogic - 在 Anylogic PLE 中使用 RL4J 训练深度强化学习模型的最佳方法是什么?
- python - 如何从json url的dict结构访问url
- javascript - 寻找电话号码正则表达式模式的 javascript lookbehind 替代方案
- vba - Microsoft Word:选择并转到 InlineShape
- laravel - 如何使用集合映射对 laravel 7 eloquent 中的数据进行排序?
- sql - 超过 60 秒的最大执行时间(需要帮助减少运行时间)
- iis - Joomla 显示 IP 而不是域名