特定名称的变异性计算 Pandas

Name-Specific Variability Calculations Pandas

我正在尝试根据两个 df 计算可变性统计数据 - 一个包含当前数据,另一个包含当月平均数据。假设我有一个如下所示的 df“DF1”:

    Name year   month   output
0   A   1991    1       10864.8
1   A   1997    2       11168.5
2   B   1994    1       6769.2
3   B   1998    2       3137.91
4   B   2002    3       4965.21

和一个名为“DF2”的 df,其中包含多年的月平均值,例如:

    Name month  output_average
0   A   1       11785.199
1   A   2       8973.991
2   B   1       8874.113
3   B   2       6132.176667
4   B   3       3018.768

并且,我需要一个新的 DF,将其称为“DF3”,它需要看起来像这样,并针对“名称”列中的变化和每个“月份”的变化进行特定计算:

    Name year  month   Variability
0   A    1991  1      -0.078097875
1   A    1997  2       0.24454103
2   B    1994  1      -0.237197002
3   B    1998  2      -0.488287737
4   B    2002  3       0.644782

我已经尝试过类似下面的选项,但有关于复制轴或键错误的错误 -

DF3['variability'] = 
((DF1.output/DF2.set_index('month'['output_average'].reindex(DF1['name']).values)-1)

感谢您帮助学习来自 matlab 的 Python 行计算!

对于两列,你最好使用merge而不是set_index

df3 = df1.merge(df2, on=['Name','month'], how='left')
df3['variability'] = df3['output']/df3['output_average'] - 1

输出:

  Name  year  month    output  output_average  variability
0    A  1991      1  10864.80    11785.199000    -0.078098
1    A  1997      2  11168.50     8973.991000     0.244541
2    B  1994      1   6769.20     8874.113000    -0.237197
3    B  1998      2   3137.91     6132.176667    -0.488288
4    B  2002      3   4965.21     3018.768000     0.644780