在Pandas DataFrame中对比收盘价与前一日并生成Info列
为交易历史DataFrame添加涨跌标记列
需求说明
基于给定的交易历史数据,新增Info列,标记每个交易日收盘价相对前一日的变化:
- 上涨(收盘价高于前一日)标记为
1 - 下跌(收盘价低于前一日)标记为
-1 - 持平(收盘价与前一日相同)标记为
0
代码实现
首先构造示例DataFrame:
import pandas as pd # 构造示例交易数据 data = { 'open': [187100, 188000, 188000, 188000, 188000], 'high': [187100, 188000, 188000, 188000, 188000], 'low': [187100, 188000, 188000, 188000, 188000], 'close': [187100, 188000, 188000, 188000, 188000] } df = pd.DataFrame(data)
方法一:使用numpy.where链式判断
import numpy as np # 计算收盘价与前一日的差值 close_diff = df['close'].diff() # 根据差值生成Info列 df['Info'] = np.where(close_diff > 0, 1, np.where(close_diff < 0, -1, 0))
方法二:使用apply自定义函数
def generate_change_flag(close_series): diff = close_series.diff() return diff.apply(lambda x: 1 if x > 0 else (-1 if x < 0 else 0)) df['Info'] = generate_change_flag(df['close'])
最终结果
处理后的DataFrame如下:
| open | high | low | close | Info |
|---|---|---|---|---|
| 187100 | 187100 | 187100 | 187100 | 0 |
| 188000 | 188000 | 188000 | 188000 | 1 |
| 188000 | 188000 | 188000 | 188000 | 0 |
| 188000 | 188000 | 188000 | 188000 | 0 |
| 188000 | 188000 | 188000 | 188000 | 0 |
说明:第一行无前置交易日数据,差值为NaN,统一标记为0;第二行收盘价较前一日上涨,标记为1;后续交易日收盘价均持平,标记为0。
内容的提问来源于stack exchange,提问作者Hannah
相关产品推荐
相关产品推荐

