Pandas 使用每月平均值的行的逐元素变异性

Pandas Element-Wise Variability by Rows using Monthly Averages

我有一个名为“df”的 df,如下所示:

     year    month    adjusted_power
333  2018    10       4
334  2018    11       2
335  2018    12       1
336  2019    01       6
337  2019    02       8
338  2019    03       2
339  2019    04       12
340  2019    05       10
341  2019    06       6
342  2019    07       2
343  2019    08       2
344  2019    09       4
345  2019    10       4
346  2019    11       8
347  2019    12       10

而且,我需要将它按元素除以称为“dfavgs”的月平均值数据框

      month  adjusted_power_average
0     01            2
1     02            4
2     03            6
3     04            8
4     05            6
5     06            2
6     07            4
7     08            8
8     09            8
9     10            6
10    11            4
11    12            4

因此,就新 df "dfvar" = (df/dfavgs) -1

的可变性而言,输出看起来像这样
     year    month    var
333  2018    10       0.66
334  2018    11       0.25
335  2018    12       0.25
336  2019    01       3
337  2019    02       2
338  2019    03       0.33
339  2019    04       1.5
340  2019    05       1.66
341  2019    06       3
342  2019    07       0.5
343  2019    08       0.25
344  2019    09       0.5
345  2019    10       0.66
346  2019    11       2
347  2019    12       3.16

我不确定如何继续计算循环结构中的元素可变性,使用 lamba 变量或类似的东西但它只给我前 12 个可变性数字和列的其余部分是南:

dfvar = (df.loc[:,'adjusted_power'].div(dfavgs.loc[:,'adjusted_power_average']) - 1)

感谢您的帮助!

试试

df['new'] = df.adjust_power/dfavgs.set_index('month')['adjusted_power_average'].reindex(df['month']).values

使用map:

df['var'] = df['adjusted_power']/df['month'].map(dfavgs.set_index('month')['adjusted_power_average'])

输出:

     year  month  adjusted_power       var
333  2018     10               4  0.666667
334  2018     11               2  0.500000
335  2018     12               1  0.250000
336  2019      1               6  3.000000
337  2019      2               8  2.000000
338  2019      3               2  0.333333
339  2019      4              12  1.500000
340  2019      5              10  1.666667
341  2019      6               6  3.000000
342  2019      7               2  0.500000
343  2019      8               2  0.250000
344  2019      9               4  0.500000
345  2019     10               4  0.666667
346  2019     11               8  2.000000
347  2019     12              10  2.500000