如何在if条件中引用前行值,实现pandas股价连续新高次数统计?
解决方案
实现思路
- 先逐行判断当前股价是否高于前一行股价,生成布尔标记
- 对未创新高的位置做分组标记,连续创新高的行都会被分到同一组
- 在每个分组内做累计计数,即可得到连续创新高的次数,未创新高的行计数自动归0
完整代码
import pandas as pd data=[[150,0],[275,0],[300,0],[280,0],[300,0],[350,0],[400,0]] df=pd.DataFrame(data,columns=['Stock Price','Number of higher highs']) # 判断当前股价是否高于前一日 df['is_higher'] = df['Stock Price'] > df['Stock Price'].shift(1) # 生成连续创新高区间的分组标识 df['group'] = (~df['is_higher']).cumsum() # 分组累计计数得到连续新高次数 df['Number of higher highs'] = df.groupby('group').cumcount() # 删除计算过程中的辅助列 df = df.drop(columns=['is_higher', 'group']) print(df)
输出结果
运行后得到的df和你要求的效果完全一致:
| Stock Price | Number of higher highs |
|---|---|
| 150 | 0 |
| 275 | 1 |
| 300 | 2 |
| 280 | 0 |
| 300 | 1 |
| 350 | 2 |
| 400 | 3 |
内容的提问来源于stack exchange,提问作者lindstroem
相关产品推荐
相关产品推荐

