簡體   English   中英

如何確定 dataframe 中哪一行分布最均勻和最高

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

我想按分布最均勻但值也很高的行對 pandas dataframe 進行排序。 例如:

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

在此示例中,可以認為最“均勻分布”的行是 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM