我有一个包含许多列的 pandas 数据框,对于每一列,我想生成一个新列,其中结果是值相对于该列平均值的百分比差异,如下例所示:
d = {'var1': [1, 2], 'var2': [3,4]}
df = pd.DataFrame(data=d)
df
var1 var2
0 1 3
1 2 4
结果:
var1 var2 var1_avg var2_avg
0 1 3 -0.33 -0.14
1 2 4 0.33 0.14
我知道如何找到列的平均值,然后计算百分比差异,但仅限于单个列,如下所示:
df['var1_avg'] = (df.var1 - df.var1.mean()) / df.var1.mean()
但是,我有 100 列,并且希望有一种方法可以将其应用到每一列并将“_avg”附加到每个新列名称。
最佳答案
您可以使用pandas.concat
和 pandas.DataFrame.add_suffix
:
>>> pd.concat([df, ((df - df.mean())/df.mean()).add_suffix("_avg")], axis = 1)
var1 var2 var1_avg var2_avg
0 1 3 -0.333333 -0.142857
1 2 4 0.333333 0.142857
关于python - Pandas 与平均值的百分比差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66666293/