你如何重新计算数据框中每一行的标准偏差?

How do you recalculate Standard Deviation at each row in a Dataframe?

我正在尝试为每个唯一的客户 ID 计算每一行的 'Cost' 列的标准偏差。每行添加新值,然后确定新的标准偏差。我正在寻找生成如下所示的 'Standard Deviation' 列!

Client ID    Session  Cost    Standard Deviation
1            0        10      NaN
1            1        11      0.5000
1            2        14      1.6997
2            0        15      NaN
2            1        16      0.5000
2            2        14      0.8165
2            3        22      3.1122

这样做就可以了:

df["Standard Deviation"] = df.groupby("Client ID")["Cost"].expanding(2).std(ddof=0).reset_index()["Cost"]
   Client ID  Session  Cost  Standard Deviation
0          1        0    10                 NaN
1          1        1    11            0.500000
2          1        2    14            1.699673
3          2        0    15                 NaN
4          2        1    16            0.500000
5          2        2    14            0.816497
6          2        3    22            3.112475

说明

您可以将您的问题改写为:

Finding the cumulative standard deviation of the "Cost" column grouped by the "Client ID" column.

Pandas 方便地具有 built-in 处理累积和分组计算的函数。

分组依据

计算标准偏差的分组依据如下所示:

df.groupby("Client ID")["Cost"].std()
Client ID
1    2.081666
2    3.593976

累计

累积标准差可以这样计算(注意,我们使用ddof=0来得到总体的标准差,这就是我们想要的。我们还使用min_periods=2 ,否则第一行的值为 0.0 而不是 NaN):

df.expanding(min_periods=2)["Cost"].std(ddof=0)
0         NaN
1    0.707107
2    2.081666
3    2.380476
4    2.588436
5    2.338090
6    3.909695

分组依据 + 累计

结合两者,得到我们的结果(注意,我们需要通过索引重新设置索引丢组,使用原来的索引):

df.groupby("Client ID")["Cost"].expanding(2).std(ddof=0).reset_index()["Cost"]
0         NaN
1    0.500000
2    1.699673
3         NaN
4    0.500000
5    0.816497
6    3.112475