[英]Python: How do I write a function to determine which variable in a dataframe has the highest absolute correlation with a specified column?
[英]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.