如何解决如何计算每日数据时间序列的百分比变化
我有一个索引数据的每日时间序列,并希望对其进行每年的 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%
解决方法
首先,一些建议:
- 不要使用
list
作为列表名称,因为您会覆盖内置的list
。 - 不要使用
index
作为列名,因为在 Pandas 中index
包含行标识。此外,这可能会令人困惑,因为您可以使用df.column_name
访问列,但在这种情况下这是不可能的,因为df.index
包含数据帧索引。 - 确保在创建日期时间索引时使用
pandas.DateTimeIndex
。
l = [7.71,7.79,6.80,6.44,6.46,6.80]
index = pd.DatetimeIndex(['2016-01-04','2016-01-05','2016-01-06','2017-01-04','2017-01-05','2017-01-06'])
df = pd.DataFrame(l,columns=['col'],index = index)
现在,您可以将 pandas.DataFrame.pct_change
与 pandas.DateOffset
对象一起使用:
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
,
EDIT:从@Pablo C 的好答案开始:鉴于 OP 对 DataFrame 的定义,我们首先需要将索引转换为 DatetimeIndex
,否则 @Pablo C 的答案将抛出NotImplementedError: Not supported for type Index
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','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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。