如何确定数据框中的哪一行具有最均匀和最高的分布

How to determine which row in dataframe has most even and highest distribution

我想按分布最均匀但值也高的行对 pandas 数据框进行排序。例如:

Row  Attribute1  Attribute2 Attribute3
a        1           1          108
b        10          2          145
c        50          60         55
d        100         90         120
e        20          25         23
f        1000        30         0

d 和 c 行应该排名最高,最好是 d 之后是 c。

我考虑过使用标准偏差来确定最均匀的分布,然后平均得到最高的平均值,但我不确定如何将它们组合在一起。

由于您提到的“均匀分布”的看法似乎很主观,这里有一个实现@ALollz 提到的变异系数的说明。

df.std(axis=1) / df.mean(axis=1)

Row 0
a   1.6848130582715446
b   1.535375387727906
c   0.09090909090909091
d   0.14782502241793033
e   0.11102697698927574
f   1.6569547684031352

此指标是以标准差表示的平均值的百分比。如果行平均值为 10,标准差为 1,则比率将为 10% 或 0.1

在这个例子中,可以考虑最多'evenly distributed'的行是c行:它的均值为55,标准差为5。因此比率约为9%。

这样,您就可以对分布的均匀性有一个很好的了解。

想要排名的可以申请.sort_values:

(df.std(axis=1) / df.mean(axis=1)).sort_values()
Row 0
c   0.09090909090909091
e   0.11102697698927574
d   0.14782502241793033
b   1.535375387727906
f   1.6569547684031352
a   1.6848130582715446

我最后的话是不要被我们大脑的感知所愚弄:它很容易被统计数据所欺骗。

现在如果你想提高更高值的结果,你可以将这个系数除以平均值:平均值越高,系数越低。

(df.std(axis=1) / df.mean(axis=1)**2).sort_values()

Row 0
d   0.0014305647330767452
c   0.001652892561983471
f   0.004826081849717869
e   0.004898248984820989
b   0.029338383204991835
a   0.045949447043769395

现在我们得到了想要的排名:首先是d,然后是c、f、e、b和a