如何用Pandas计算单标的上次交易间隔及上次交易类型?
解决方案
首先修正你提供的DataFrame创建代码(原写法参数顺序错误):
import pandas as pd df = pd.DataFrame({ 'symbol': ["AAPL", "AAPL", "GOOG", "AAPL", "GOOG"], 'time': [1, 2, 3, 6, 7], 'type': ["BUY", "SELL", "BUY", "BUY", "BUY"] })
不需要用merge_asof,直接通过groupby结合shift()就能高效实现需求:
新增时间间隔列
按symbol分组后,用当前行的time减去上一行的time(通过shift(1)获取上一行数据):
df['last_trade_interval'] = df.groupby('symbol')['time'].apply(lambda x: x - x.shift(1))
新增上次交易类型列
同样按symbol分组,对type列执行shift(1)即可获取同一标的的上一次交易类型:
df['last_trade_type'] = df.groupby('symbol')['type'].shift(1)
最终结果
运行后DataFrame内容如下:
| symbol | time | type | last_trade_interval | last_trade_type |
|---|---|---|---|---|
| AAPL | 1 | BUY | NaN | NaN |
| AAPL | 2 | SELL | 1.0 | BUY |
| GOOG | 3 | BUY | NaN | NaN |
| AAPL | 6 | BUY | 4.0 | SELL |
| GOOG | 7 | BUY | 4.0 | BUY |
完全匹配你给出的示例结果。
内容的提问来源于stack exchange,提问作者Joey
相关产品推荐
相关产品推荐

