繁体   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