Python/Pandas- 在趋势变化时应用标签(识别数据集中的局部最大值和最小值)

Posted

技术标签:

【中文标题】Python/Pandas- 在趋势变化时应用标签(识别数据集中的局部最大值和最小值)【英文标题】:Python/Pandas- applying label at trend shift (identifying local maxima and minima in dataset) 【发布时间】:2018-09-14 23:44:28 【问题描述】:

所以我有一个 CSV,其中有股票价格,并且每一天(行)我都有一个相应的列,显示价格在前一天是上涨还是下跌。

任务:我想识别波峰和波谷(参见示例截图)。 逻辑:趋势变化前的最后一个“增加”单元格应标记为“峰值”。 同样对于减少...

我猜这将使用带有中断/继续的循环。 对于编写代码的确切建议,我将不胜感激。

谢谢!

【问题讨论】:

【参考方案1】:

这是使用pandasnumpy 功能的矢量化解决方案。

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        

【讨论】:

【参考方案2】:

可能不是最pythonic/efficient 的方式,但这会起作用:

price = ['increase', 'increase', 'increase', 'decrease', 'decrease', 'increase']

break_point = []
for index, value in enumerate(price):
    try:
        if value == price[index + 1]:
            break_point.append(' ')
        else:
            if value == 'increase':
                break_point.append('peak')
            else:
                break_point.append('trough')
    except IndexError:
        break

print(break_point)

【讨论】:

以上是关于Python/Pandas- 在趋势变化时应用标签(识别数据集中的局部最大值和最小值)的主要内容,如果未能解决你的问题,请参考以下文章

python pandas在已存在的excel中追加数据

Python Pandas:如何将数据框列值设置为 X 轴标签

Python Pandas DF Pivot 和 Groupby

Python Pandas 插值:在缺失的日期范围内重新分配值

在选择图表类型时,用来显示某个时期内,在同时间间隔内的变化趋势,应选择

Python pandas / matplotlib在条形图列上方注释标签[重复]