[英]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.