给出了一个与条件匹配的索引列表,该列表中有许多跨度是顺序相邻的,我如何轻松地仅选择每个跨度中的第一个。
这样
magicallySelect([1,2,3,10,11,12,100,101,102]) == [1,10,100]
但是-重要的是,这也应该适用于其他指标,例如日期(我的数据就是这种情况)。我希望可以使用的实际代码是:
original.reset_index(inplace=True)
predict = {}
for app in apps:
reg = linear_model.LinearRegression()
reg.fit(original.index.values.reshape(-1, 1), original[app].values)
slope = reg.coef_.tolist()[0]
delta = original[app].apply(lambda x: abs(slope - x))
forecast['test_delta'] = forecast[app].apply(lambda x: abs(slope - x))
tdm = forecast['test_delta'].mean()
tds = forecast['test_delta'].std(ddof=0)
# identify moments that are σ>2 abnormal
forecast['z'] = forecast['test_delta'].apply(lambda x: abs(x - tdm / tds))
sig = forecast.index[forecast[forecast['z'] > 2]].tolist()
predict[app] = FIRST_INDEX_IN_EACH_SPAN_OF(sig)
答案 0 :(得分:1)
l = [1,2,3,10,11,12,100,101,102]
indices = [l[i] for i in range(len(l)) if l[i-1]!=l[i]-1]
对日期时间稍作重新排序,可以使列表中的所有项目与上一个项目的差距大于1天(默认情况下加上第一个项目):
indices = [l[0]] + [l[i] for i in range(len(l)) if (l[i]-l[i-1]).days>1]
对于以分钟为单位的时间差,您可以将其转换为秒,并将其替换为秒。在15分钟(900秒)内,您可以执行以下操作:
indices = [l[0]] + [l[i] for i in range(len(l)) if (l[i]-l[i-1]).seconds>900]