python - Pandas 与平均值的百分比差异

标签 python pandas dataframe

我有一个包含许多列的 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.concatpandas.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/

相关文章:

python - Pandas 在分组后找到中位数

python - 在 Python 中获取字符串中特殊字符后的第一个单词

python - Pandas - 将多个组行合并为一行

python - 从 CSV 输出制作 DataFrame

python - Pandas 根据元素的类别拆分列

python - 如何使用空列表对pandas中的列进行json_normalize,而不会丢失记录?

python - 如何保存带轮廓的OpenCV图像

python - 如何删除列表中彼此相邻的重复值之一?

python pandas-将带有两个参数的函数应用于列

python - 以编程方式编辑 Photoshop PSD 文本图层