我正在尝试根据一组年份(1991年至1993年)的月平均值(1月至12月)创建具有月偏差(变异性)的熊猫df。我有一个df-“数据”-这是一个4 x 13,看起来像这样,第一列为“ year”,然后是月份数据,即“ 01”为Jan,依此类推。
month year 01 02 03 04 05 06 07 08 09 10 11 12
year
0 1991 2 6 9 11 3 5 8 9 0 10 12 7
1 1992 3 4 1 17 5 8 9 1 2 18 19 3
2 1993 6 6 2 10 5 3 8 3 4 17 20 4
我有一个月平均值的df,我们将其称为“ monthly_averages”,如下所示:
month 01 02 03 04 05 06 07 08 09 10 11 12
0 3 4 5 13 4 6 8 5 2 13 14 5
我的结果应该是4行13列的df,这样就显示了每年(1991年,1992年,1993年)的偏差,以及每月的年列+列。我找到的最佳解决方案如下所示,但它仅给我第一行,第一列的偏差,其余均为NaN:(data.div(monthly_averages [['01']],axis = 0))-1 预先感谢您的见解。
答案 0 :(得分:1)
如果我正确理解了您的描述,则可以尝试
df_final = (data.div(monthly_averages.loc[0], axis=1) - 1).fillna(data)
Out[234]:
01 02 03 04 05 06 07 08 09 10 \
0 -0.333333 0.5 0.8 -0.153846 -0.25 -0.166667 0.000 0.8 -1.0 -0.230769
1 0.000000 0.0 -0.8 0.307692 0.25 0.333333 0.125 -0.8 0.0 0.384615
2 1.000000 0.5 -0.6 -0.230769 0.25 -0.500000 0.000 -0.4 1.0 0.307692
11 12 year
0 -0.142857 0.4 1991.0
1 0.357143 -0.4 1992.0
2 0.428571 -0.2 1993.0