繁体   English   中英

python 在列表中查找索引的边缘

[英]python find edge of indexes in a list

我有一个 DataFrame 从中过滤值。 假设我的数据是x=[1 1 1 2 2 3 3 3 1 1 1 3 3 1 1]; 我想拥有 3 所在的所有索引。 所以我正在执行data=df[df.x==3]来获取列表data.index=[5,6,7,11,12]

现在我想生成一个窄列表,它将为我提供 3 所在的范围: [[5, 7] [11, 12]] 有没有一种简单的方法来做到这一点,而不是为此写一个 function ?

在 Matlab 中,我按照以下方式执行此操作( idx - 3 所在的索引列表, a是输出)

a(1,1)=idx(1);
j=1;
for i=2:length(idx)
    if (idx(i) ~= (idx(i-1)+1))
        a(j,2)=idx(i-1);
        if i < length(idx)
            j=j+1;
            a(j,1)=idx(i);
        end
    end
end
a(j,2)=idx(end);

您使用的是 Python 3 吗? 我不确定你所说的简单是什么意思。

如果您有数据列表 -> data = [5,6,7,11,12]

您可以通过这种方式对它们进行分组(请参阅 Python 文档HERE

from itertools import groupby
from operator import itemgetter

ranges =[]
data = [5,6,7,11,12]
for k, g in groupby(enumerate(data), lambda x:x[0]-x[1]):
    group = list(map(itemgetter(1), g))
    ranges.append([group[0], group[-1]])
print(ranges)

给你,

[[5, 7], [11, 12]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM