如何获得数据框匹配中的第一个索引

时间:2019-03-15 22:08:06

标签: python pandas

给出了一个与条件匹配的索引列表,该列表中有许多跨度是顺序相邻的,我如何轻松地仅选择每个跨度中的第一个。

这样

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)

1 个答案:

答案 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]