如何确定数据框中的哪一行具有最均匀和最高的分布
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
我想按分布最均匀但值也高的行对 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