因此,我有一个 CSV,其中包含股票价格,并且对于每一天(行),我都有一个相应的列,显示价格较前一天是上涨还是下跌。
任务:我想识别波峰和波谷(参见示例屏幕截图)。 逻辑:趋势变化之前的最后一个“增加”单元格应标记为“峰值”。 同样对于减少...
我猜这将使用带有中断/继续的循环。 我将非常感谢编写代码的确切建议。
谢谢!
最佳答案
这是一个使用 pandas
和 numpy
功能的矢量化解决方案。
import pandas as pd, numpy as np
df = pd.DataFrame({'seq': ['inc', 'dec', 'inc', 'inc', 'inc', 'dec', 'dec', 'dec', 'inc']})
df['mark'] = df['seq'].map({'inc': 1, 'dec': -1}).diff().shift(-1).map(np.sign).fillna(0)
df['mark'] = df['mark'].map({-1: 'peak', 1: 'trough', 0: ''})
# seq mark
# 0 inc peak
# 1 dec trough
# 2 inc
# 3 inc
# 4 inc peak
# 5 dec
# 6 dec
# 7 dec trough
# 8 inc
关于Python/Pandas-在趋势转变时应用标签(识别数据集中的局部最大值和最小值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49667502/