Python 如何计算每日数据时间序列的百分比变化

Python 如何计算每日数据时间序列的百分比变化,python,pandas,percentage,Python,Pandas,Percentage,我有一个indexdata的每日时间序列,并希望每年对其进行pct更改。如果我使用DataFrame.pct_change(periods=…)我必须定义到去年同一天的确切天数,这是不正确的,因为工作天数每年都不同。有人知道如何从一年前的同一天获得这些变化吗 代码可能如下所示: import pandas as pd list=[] list=[[7.71],[7.79],[6.80],[6.44],[6.46],[6.80]] df = pd.DataFrame(list, columns=

我有一个indexdata的每日时间序列,并希望每年对其进行pct更改。如果我使用
DataFrame.pct_change(periods=…)
我必须定义到去年同一天的确切天数,这是不正确的,因为工作天数每年都不同。有人知道如何从一年前的同一天获得这些变化吗

代码可能如下所示:

import pandas as pd

list=[]
list=[[7.71],[7.79],[6.80],[6.44],[6.46],[6.80]]
df = pd.DataFrame(list, columns=['index'], index=['2016-01-04','2016-01-05','2016-01-06','2017-01-04','2017-01-05','2017-01-06'])
我希望输出如下:

2017-01-04  -16.45%
2017-01-05  -17.10%
2017-01-05    0.00% 

编辑:从@Pablo C的正确答案开始:鉴于OP对数据帧的定义,我们首先需要将索引转换为
日期时间索引
,否则@Pablo C的答案将抛出
未实现错误:类型索引不支持

import pandas as pd

list=[]
list=[[7.71],[7.79],[6.80],[6.44],[6.46],[6.80]]
df = pd.DataFrame(list, columns=['index'], index=['2016-01-04','2016-01-05','2016-01-06','2017-01-04','2017-01-05','2017-01-06'])

df.index = pd.to_datetime(df.index)

do = pd.DateOffset(years = 1)
df.pct_change(freq = do).dropna().mul(100)


#               index
# 2017-01-04    -16.472114
# 2017-01-05    -17.073171
# 2017-01-06    0.000000

第一,一些建议:

  • 不要使用
    list
    作为列表名,因为这样会覆盖内置的
    列表
  • 不要使用
    index
    作为列名,因为在
    index
    中包含行标识。此外,由于可以使用
    df.column\u name
    访问列,因此可能会造成混淆,但在这种情况下,这是不可能的,因为
    df.index
    包含数据帧索引
  • 确保在创建日期时间索引时使用
  • 现在,您可以与对象一起使用:

    输出

                    index
    2017-01-04 -16.472114
    2017-01-05 -17.073171
    2017-01-06   0.000000
    
    do = pd.DateOffset(years = 1)
    df.pct_change(freq = do).dropna().mul(100)
    
                    index
    2017-01-04 -16.472114
    2017-01-05 -17.073171
    2017-01-06   0.000000