我有一个Pandas数据帧,其索引为每日时间步长如下:
oldman.head()
Value
date
1992-01-01 1080.4
1992-01-02 1080.4
1992-01-03 1080.4
1992-01-04 1080.0
1992-01-05 1079.6
...
从1992-01-01开始到2016-12-31。我想提取每年的每周平均值。但是,我的周应该是特别的方式。一年有52周,有365天,但上周为8天!第一周应该从每年的1月1日开始。
我想知道我应该如何从每日时间步数据中提取这样的周数。
谢谢,
答案 0 :(得分:2)
我在上周修改了COLDSPEED的解决方案,为8天。值得注意的是,在闰年的最后一周"周"实际上是9天。以下示例仅在您包含所有年份时才有效。原因是我的函数假设groupby中的最后一行实际上是一年中的最后一周。
#make some data
df = pd.DataFrame(index=pd.date_range("1992-1-1","1992-12-31"))
df["value"] = 1
#add a counting variable
df["count"] = 1
df = df.groupby(pd.Grouper(freq='Y'))\
.resample('7D')\
.sum()\
.reset_index(level=0, drop=True)\
def chop_last_week(df):
df1=df.copy()
df1.iloc[-2] += df1.iloc[-1]
return df1.iloc[:-1]
df = df.groupby(df.index.year)\
.apply(chop_last_week)\
.reset_index(level=0, drop=True)
df["mean"] = df["value"]/df["count"]
df.tail(5)
它不是最干净的解决方案,但它运行得很快。