[英]find the index that gives the second largest difference between two lists in Python
我想確定兩個等長列表之間的索引,該索引給出每行之間差異的第二個最大絕對值。
import random
import pandas as pd
random.seed(2)
l1 = pd.DataFrame([random.randrange(100) for _ in range(10)])
l2 = pd.DataFrame([random.randrange(100) for _ in range(10)])
l1-l2
0
0 -20
1 -66
2 6
3 -28
4 -66
5 74
6 30
7 -42
8 -18
9 -15
現在,我可以使用idxmax()
來獲得給我最大絕對值差異的索引,即第 5 行。我的問題是如何獲得給出第二大差異值的索引?
(l1 - l2).abs().idxmax()
0 5
dtype: int64
選項1:簡單的方法:排序,然后切片(復雜度O(n log n)
)
(l1 - l2).abs().sort_values([0], ascending=False).index[1]
選項 2: nlargest
,然后idxmin
(復雜度O(n)
):
(l1 - l2).abs().nlargest(2, columns=[0]).idxmin()
請注意,您的數據實際上有兩行值為66
,因此您可能會得到1
和4
之間的隨機答案。
您可以使用idxmax()
確定最大的絕對差異,然后通過其索引將其從列表中刪除並再次使用idxmax()
,這將為您提供第二大絕對差異的索引。
l = (l1 - l2)
largest_index = l.abs().idxmax()
del l[largest_index]
l.idxmax()
由於尚不清楚您是否想要原始(l1 - l2)
中第二大絕對差的索引,此選項將實現此目的。
l = (l1 - l2)
largest_index = l.abs().idxmax()
l[largest_index] = 0
l.idxmax()
通過將最大絕對差設置為零,第二次調用將為您提供第二大絕對差的索引,但不會更改(l1 - l2)
的大小,也不會更改其順序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.