【问题标题】:Finding anomalies or deviation in a dataframe. Comparing mean and stand deviations via plotting查找数据框中的异常或偏差。通过绘图比较均值和标准偏差
【发布时间】:2025-10-02 18:45:02
【问题描述】:

我通过抓取网页并收集脚本哈希和深度来收集数据。我已将数据转换为熊猫数据框。

目标 作为我研究的一部分,我想做一些统计测量,并找出深度在每组哈希中的表现。

2) 我使用 std() 函数计算了深度的组标准差。但不确定如何将其与散列组的标准差进行比较。

3) 还计算了每组哈希的平均值。想知道如何有一个单独的列来显示组平均值和实际值之间的差异。想知道如何绘制这两列。(新列和绘图也适用于问题 2)。

如果有任何新的方法来识别异常值或偏差,也想知道它们。

数据:

       FileHash      Depth
0         A            1
1         A            2
2         C            1
3         B            1
4         C            3
5         A            5
6         C            2
7         A            0

我试图找到最合适的分布拟合器,发现 gennorm 是最好的。

我还尝试使用修改后的 z 分数来查找异常值。

对于问题 3,我期待这样的输出:

     FileHash      Depth  MeanDeviation
0      A             1       -1
1      A             2        0
2      C             1       -1
3      B             1        0
4      C             3        1
5      A             5        3
6      C             2        0
7      A             0       -2

【问题讨论】:

  • 感谢@Brendan 的编辑:thumbsup

标签: python python-3.x pandas statistics


【解决方案1】:

以下是否满足您的需求?

import matplotlib as plt
import pandas as pd
import numpy as np
# your data 
df = pd.DataFrame({'FileHash': ['A', 'A', 'C', 'B', 'C', 'A', 'C', 'A'], 'Depth': [1,2,1,1,3,5,2,0]})


mean_dev = df.Depth - df.groupby('FileHash').Depth.transform('mean')
df.assign(MeanDeviation=mean_dev)

输出

   FileHash       Depth    MeanDeviation
0      A             1       -1
1      A             2        0
2      C             1       -1
3      B             1        0
4      C             3        1
5      A             5        3
6      C             2        0
7      A             0       -2

df.plot(use_index=False, y=['Depth','MeanDeviation'])

绘制深度和平均偏差的比较。

注意: 我不知道你的意思是什么

不确定如何将其与该组的标准差进行比较 哈希

因为单个观察不能有标准偏差。标准差只是一组值的度量。

【讨论】:

  • 我想我可以在标准差上尝试相同的方法。我错过了转换命令。
  • 对您的代码的一个小修正,分配函数不会将新列添加到原始数据框中。您可以使用df= df.assign(MeanDeviation=mean_dev) 否则,在绘图时,会发生错误--> MeanDeviation not in index.
  • 我对您的意思很感兴趣,因为根据定义,标准差仅适用于数据组en.wikipedia.org/wiki/Standard_deviation。您的意思是您会将每个数据的 z 分数与 SD 进行比较?感谢您通过重新分配了解这一点。我注意到该站点上的许多帖子都采用不将所需输出分配给任何变量的约定,这与使用 Jupyter 笔记本的方式一致。由于我不经常使用 Jupyter,所以我在这个约定上犯了很多错误。
  • 是的,标准差适用于组。所以对于 Std.dev。而不是您提到的上述代码中的平均值,我将其更改为应用标准偏差。
  • 非常感谢@zackg22