问题描述
鉴于下面“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