你如何重新计算数据框中每一行的标准偏差?
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
我正在尝试为每个唯一的客户 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