对数据帧进行分组并按组计算标准化标准差?

时间:2016-04-04 09:53:15

标签: python pandas

我有一个如下所示的数据框:

           product  cost_per_quantity
12779  0101010G0BB         160.788357
12653  0101010G0BC         179.493956
10390  0101010I0AA           0.425916
20361  0101010I0AA           0.603650
22504  0101010I0AA           0.633082

创建时:

df = pd.DataFrame({ 'product': ['0101010G0BB', '0101010G0BC', '0101010I0AA', '0101010I0AA', '0101010I0AA'], 'cost_per_quantity': [160.788357, 179.493956, 0.425916, 0.603650, 0.633082]})

现在我想找到cost_per_quantity中变化最大的产品。

例如,我想检查产品0101010I0AA,并在其三个条目中找到cost_per_quantity的标准化标准偏差,然后将其与其他产品的标准化标准偏差进行比较

最好的方法是什么?我试过了:

df1 = df.groupby('product').agg(np.std)

但这只是给了我一堆NaN s。

1 个答案:

答案 0 :(得分:2)

对于聚合df.groupby('product').agg(np.std)是正确的,但对于1个观察组,这将返回NaN,因为无法为1个观察组计算样本标准偏差。标准偏差的Numpy默认值是人口标准差,但我猜Pandas是最重要的。

您可以使用人口标准差来获得这些组的0。

如果您想查看相对于均值的相对偏差,可以使用coefficient of variation

df.groupby('product').apply(lambda x: np.std(x) / np.mean(x))

现在np.std处于lambda函数中,它的行为符合预期。