Pandas 将 DF 列的唯一行除以不同的 DF 唯一均值

问题描述

鉴于下面“A”和“B”的列数据值的平均值,我一直在尝试创建一个可变列。我不明白如何通过具有长期平均值的单个数据值为熊猫列中的每一行或元素创建平均值。例如,想象一下如果在 Pandas df1 中有这样的数据:

Year     Name   Data
1999     A      2
2000     A      4
1999     B      6
2000     B      8

而且,我有一个长期均值称为“LTmean”的 DF,在本例中为 = 3 和 7。

mean_df = 
Name    Data mean
0   A          3
1   B          7

因此,对于新的 df,结果将如下所示: dfnew['var'] = (df1.['Data']/mean_df(???) -1:

Year   Name   Var
1999    A     -0.3
2000    A      0.3
1999    B     -0.14
2000    B      0.14

感谢您对此提出任何建议!以某种方式使用 A、B 的唯一 mean_df 值按每个 DF 中的“名称”循环遍历每一列是否是循环的最佳主意?

解决方法

使用 groupby().transform 将结果传播到原始索引:

df['Var'] = df['Data']/df.groupby(['Name'])['Data'].transform('mean') - 1

输出:

   Year Name  Data       Var
0  1999    A     2 -0.333333
1  2000    A     4  0.333333
2  1999    B     6 -0.142857
3  2000    B     8  0.142857