首页 > 解决方案 > 在数据帧时间序列中标记价格的突然变化并为其着色

问题描述

我有一个熊猫数据框,包含不同月份和年份(时间序列)的价格,80 列。我希望能够检测价格的显着变化,无论是上涨还是下跌,并在数据框中对它们进行不同的着色。这可能吗?最好的方法是什么?

Jan-2001 Feb-2001 Jan-2002 Feb-2002 ....
  100      30         10     ...
  110      25          1      ...
   40       5         50
   70      11          4
   120     35          2

在第一列中应标记 40 和 70,在第二列中应标记 5 和 11,在第三列中不太确定,但可能是 1、50、4、2...

标签: python-3.xpandas

解决方案


您的问题涉及我可以看到的两个问题。

  1. 打印突出显示取决于您尝试使用的输出方法,无论是 STDOUT、文件还是某些特定程序。

  2. 基于列数据识别异常值。如果你想要它基于整个数据集很难解释,副列中的前一个数据就像一个滚动异常值,即计算前一个数据以确定下一个事情是否不正常。

在下面的实例中,我提供了一种方法,可以根据整个列中数据的平均值使用 std dev/zscoring 来处理数据。您将不得不调整 > < 项目以达到您想要的状态,处理这个概念有很多错综复杂的地方,我建议您查看一些关于这个主题的资源。

对于您的数据:

Jan-2001,Feb-2001,Jan-2002
100,30,10
110,25,1
40,5,50
70,11,4
120,35,20000

我知道要突出显示的方法,但不是在终端中。https://pandas.pydata.org/pandas-docs/stable/style.html方法适用于一些程序。

要获取原始项目,识别数据中的异常值,您可以使用如下所示的内容根据标准偏差和 zscore 进行识别。

示例代码:

df = pd.read_csv("full.txt")
original = df.columns
print(df)
for col in df.columns:
    col_zscore = col + "_zscore"
    df[col_zscore] = (df[col] - df[col].mean())/df[col].std(ddof=0)
    print(df[col].loc[(df[col_zscore] > 1.5) | (df[col_zscore] < -.5)])


print(df)

输出 1: # 打印原始数据帧

   Jan-2001  Feb-2001  Jan-2002
     100       30        10      
     110       25         1       
      40        5        50      
      70       11         4       
     120       35         20000       

输出 2: # 识别异常值

2    40
3    70
Name:     Jan-2001, dtype: int64
2    5 
3    11
Name: Feb-2001, dtype: int64
0    10   
1    1    
3    4    
4    20000
Name: Jan-2002, dtype: int64

输出 3: # 打印创建的完整数据框,每个项目的 zscore 基于列

       Jan-2001  Feb-2001  Jan-2002      Jan-2001_std      Jan-2001_zscore  \
0  100           30        10        32.710854         0.410152              
1  110           25        1         32.710854         0.751945              
2  40            5         50        32.710854        -1.640606              
3  70            11        4         32.710854        -0.615227              
4  120           35        2         32.710854         1.093737              

   Feb-2001_std  Feb-2001_zscore  Jan-2002_std  Jan-2002_zscore  
0  12.735776     0.772524         20.755722    -0.183145         
1  12.735776     0.333590         20.755722    -0.667942         
2  12.735776    -1.422147         20.755722     1.971507         
3  12.735776    -0.895426         20.755722    -0.506343         
4  12.735776     1.211459         20.755722    -0.614076    

zscore 的资源在这里: https ://statistics.laerd.com/statistical-guides/standard-score-2.php


推荐阅读