通过减去列的平均值并除以标准差来规范化列(a、b、c),并将结果分配给三个新列

Normalize columns(a, b, c) by subtracting its mean value and dividing by its standard deviation, and assign the results to three new columns

提问人:esme 提问时间:11/15/2023 更新时间:11/15/2023 访问量:38

问:

我正在尝试通过减去其平均值并除以其标准偏差来规范化列(a、b、c),并将结果分配给三个新列。然后,我需要将结果分配给三个新列,分别称为 a_norm、b_norm 和 c_norm。

我正在考虑使用 df.assign() 创建新列,但我还没有找到将所有内容放在一起的方法。

Python Pandas 数据帧 规范化

评论

2赞 Kirill Kondratenko 11/15/2023
您的问题需要一个最小的可重现示例,包括示例输入、预期输出、实际输出,以及重现问题所需的相关代码。请参阅如何制作良好的可重复熊猫示例

答:

0赞 Panda Kim 11/15/2023 #1

你必须举例才能自己得到答案。

点击以下链接:https://stackoverflow.com/help/minimal-reproducible-example

这一次,我举了一个简单的例子。

import pandas as pd
data = {'a': [8, 7, 2, 1], 'b': [1, 3, 5, 1], 'c': [2, 6, 1, 0]}
df = pd.DataFrame(data)

DF系列

    a   b   c
0   8   1   2
1   7   3   6
2   2   5   1
3   1   1   0

法典

第1步。正常化

我在每一列中执行了归一化。

(如果您需要找到合并的 a、b 和 c 列的平均值和标准差,请创建示例并再次询问。

tmp = df.sub(df.mean()).div(df.std()).add_suffix('_norm')

TMP:

    a_norm      b_norm      c_norm
0   0.996616    -0.783349   -0.095059
1   0.711868    0.261116    1.425880
2   -0.711868   1.305582    -0.475293
3   -0.996616   -0.783349   -0.855528

第2步。Concat DF 和 TMP

out = pd.concat([df, tmp], axis=1)

外:

    a   b   c   a_norm      b_norm      c_norm
0   8   1   2   0.996616    -0.783349   -0.095059
1   7   3   6   0.711868    0.261116    1.425880
2   2   5   1   -0.711868   1.305582    -0.475293
3   1   1   0   -0.996616   -0.783349   -0.855528