Pandas 一个日历年的滚动总和 window?
Pandas rolling sum over one calendar year window?
我有一个每日数据索引 pd.DataFrame,我想使用一个日历年计算滚动总和,但这会导致错误 ValueError: window must be an integer
。
import pandas as pd
from pandas.tseries.offsets import BDay
start_date = pd.to_datetime('2015-01-01').date()
end_date = pd.to_datetime('2019-12-31').date()
dfo = pd.DataFrame(data=0,
index=pd.date_range(start_date, end_date, freq=BDay()),
columns=['col1', 'col2'])
dfo.index = dfo.index.date
# ... fill in some data and then:
dfo = dfo.rolling('1Y').sum()
导致错误:ValueError: window must be an integer
因为我有每日 BD 数据,所以我可以只使用大小为 252 的 window,即每年的平均商业交易天数,但对于我的用例,使用日历年是理想的选择。
您的索引是 object
dtype
。使用时间间隔的滚动 window 期望数据帧具有 datetimeindex
。您可以通过以下方式简单地转换索引:
dfo.index = pd.to_datetime(dfo.index)
并使用以下方式计算一年的滚动总和:
dfo.rolling('365D').sum()
另请参阅 https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#dateoffset-objects 以了解哪些频率字符串可用于指定滚动时间 window。
我有一个每日数据索引 pd.DataFrame,我想使用一个日历年计算滚动总和,但这会导致错误 ValueError: window must be an integer
。
import pandas as pd
from pandas.tseries.offsets import BDay
start_date = pd.to_datetime('2015-01-01').date()
end_date = pd.to_datetime('2019-12-31').date()
dfo = pd.DataFrame(data=0,
index=pd.date_range(start_date, end_date, freq=BDay()),
columns=['col1', 'col2'])
dfo.index = dfo.index.date
# ... fill in some data and then:
dfo = dfo.rolling('1Y').sum()
导致错误:ValueError: window must be an integer
因为我有每日 BD 数据,所以我可以只使用大小为 252 的 window,即每年的平均商业交易天数,但对于我的用例,使用日历年是理想的选择。
您的索引是 object
dtype
。使用时间间隔的滚动 window 期望数据帧具有 datetimeindex
。您可以通过以下方式简单地转换索引:
dfo.index = pd.to_datetime(dfo.index)
并使用以下方式计算一年的滚动总和:
dfo.rolling('365D').sum()
另请参阅 https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#dateoffset-objects 以了解哪些频率字符串可用于指定滚动时间 window。