簡體   English   中英

找到在 Python 中給出兩個列表之間第二大差異的索引

[英]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 ,因此您可能會得到14之間的隨機答案。

您可以使用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.

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