Python将daily列转换为一个新的数据框架,其中year作为索引week作为列

Python将daily列转换为一个新的数据框架,其中year作为索引week作为列,python,pandas,dataframe,datetime,seaborn,Python,Pandas,Dataframe,Datetime,Seaborn,我有一个数据框,日期作为索引和参数。我想将列数据转换成一个新的数据框,其中年作为行索引,周数作为列名,单元格显示周平均值。然后,我将使用seaborn使用这些信息进行绘图https://seaborn.pydata.org/generated/seaborn.relplot.html 我的数据: df = data 2019-01-03 10 2019-01-04 20 2019-05-21 30 2019-05-22 40 2020-10-

我有一个数据框,日期作为索引和参数。我想将列数据转换成一个新的数据框,其中年作为行索引,周数作为列名,单元格显示周平均值。然后,我将使用
seaborn使用这些信息进行绘图https://seaborn.pydata.org/generated/seaborn.relplot.html

我的数据

df = 
              data
2019-01-03    10
2019-01-04    20
2019-05-21    30
2019-05-22    40
2020-10-15    50
2020-10-16    60
2021-04-04    70
2021-04-05    80
# convert the df into weekly averaged dataframe
wdf = df.groupby(df.index.dt.strftime('%Y-%W')).data.mean() 
wdf
2019-01  15
2019-26  35
2020-45  55
2021-20  75
我的代码

df = 
              data
2019-01-03    10
2019-01-04    20
2019-05-21    30
2019-05-22    40
2020-10-15    50
2020-10-16    60
2021-04-04    70
2021-04-05    80
# convert the df into weekly averaged dataframe
wdf = df.groupby(df.index.dt.strftime('%Y-%W')).data.mean() 
wdf
2019-01  15
2019-26  35
2020-45  55
2021-20  75
预期答案:列名表示周数,索引表示年份。单元格表示样本在该周的平均值

       01    20    26    45
2019   15    NaN   35    NaN  # 15 is mean of 1st week (10,20) in above df
2020   NaN   NaN   NaN   55
2021   NaN   75    NaN   NaN      

不知道如何进一步从上述获得的解决方案中获得预期的答案。

您需要在groupby中使用二维,然后取消堆叠以将数据作为网格进行布局:
df.groupby([df.index.year,df.index.week])['data'].mean().unstack()

您需要在groupby中使用两个维度,然后unstack将数据作为网格进行布局:
df.groupby([df.index.year,df.index.week])['data'].mean().unstack()
您可以使用:

您可以使用:


我用过这个
odf['week']=df.index.dt.strftime('%W')
另一个给出了一些错误数据。我使用了这个
odf['week']=df.index.dt.strftime('%W')
另一个给出了一些错误数据。