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