【问题标题】:How to get the Cumulative percentile value of each row in a Python time series如何获取Python时间序列中每一行的累积百分位值
【发布时间】:2020-06-17 08:45:43
【问题描述】:

如何获得累计百分位值?

Dates
1990-01-02    17.24
1990-01-03    18.19
1990-01-04    19.22
1990-01-05    20.11
1990-01-08    20.26
1990-01-09    22.20
1990-01-10    22.44
1990-01-11    20.05
1990-01-12    24.64
1990-01-15    26.34
1990-01-16    24.18

2行数据中第2行的百分位数和3行数据中第3行的百分位数等等?

【问题讨论】:

  • 您要查找的过程称为累积操作。但是没有累积百分位数之类的东西。您能否通过示例解释您在这里尝试做什么以及您为什么要这样做,即您的残局。
  • 我想在它的 N 系列中找到第 N 行值的百分比值,然后在相同的 N+1 系列中找到 N+1 的百分比值。然后,该系列将包含仅与前几行相比的每行的所有百分位数值。我这样做是为了看看每个值在其过去的分布中有多“高”或“低”。 @Zeek

标签: python time-series percentile


【解决方案1】:

你可以这样做:

import pandas as pd
import numpy as np

df=pd.read_excel('filename.xlsx') #replace filename with name of your excel file

df['date']=pd.to_datetime(df['date']) #this doesn't affect your percentile calculation but you do it to leverage full power of pandas datetime functions

val_list=df.val.values
vals=[]
perc=[]

for r in range(len(val_list)):
    l=[x for x in val_list[0:r+1]]
    vals.append(l)

for value in vals:
    perc.append(np.percentile(value,50)) #change 50 to the percentile you want to calculate
df['percentile']=perc

print(df)

这里需要注意的几个关键点:

1) 我已经通过将您的数据导入为 pandas DF 来完成计算。如果您想在 numpy 数组本身中执行此操作,则应该对上述代码进行一些调整。但是,Pandas DF 是一种在 Python 中查看表格数据的优雅方式。

2) 这可能不是最有效的方法,但它可以完成工作。因此,在非常大的数据集上小心使用它。

3) 研究代码中提到的cmets。

希望这会有所帮助!如果在下面的 cmets 中没有回复,我会尝试解决。

【讨论】:

  • 我正在通过 Pandas DF 导入数据。你是对的,在大型数据集上确实需要几秒钟左右的时间,但这没关系。我厌倦了使用 scipy 库。 perc = lambda x: sc.percentileofscore(x,x[-1],kind='strict') df['Percentile Values']= round(df_IV['PX_LAST'].expanding(1).apply(perc), 2)这似乎有效。感谢您朝正确的方向轻推。 @Zeek
猜你喜欢
  • 1970-01-01
  • 2021-03-08
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 2021-10-15
  • 2022-01-22
  • 2017-03-03
  • 2018-09-08
相关资源
最近更新 更多