我有一个简单的(稀疏)时间序列:
In[4]: df.head(8)
Out[4]:
type
2016-09-22 04:13:00+00:00 1
2016-09-22 06:13:00+00:00 2
2016-09-22 06:26:00+00:00 1
2016-09-22 06:47:00+00:00 2
2016-09-22 09:16:00+00:00 1
2016-09-22 12:02:00+00:00 2
2016-09-22 16:26:00+00:00 1
2016-09-22 16:58:00+00:00 2
类型列始终是1和2交替出现。可以假定第一个类型是1。
我只想考虑类型为2的行。此外,我想添加一个新列“ start”,其中包含上一行(类型1)的索引(时间戳):
In[4]: df.head(4)
Out[4]:
type start
2016-09-22 06:13:00+00:00 2 2016-09-22 04:13:00+00:00
2016-09-22 06:47:00+00:00 2 2016-09-22 06:26:00+00:00
2016-09-22 12:02:00+00:00 2 2016-09-22 09:16:00+00:00
2016-09-22 16:58:00+00:00 2 2016-09-22 16:26:00+00:00
答案 0 :(得分:2)
创建一个类型为2的数据框。
df1 = df[df.type == 2]
然后,添加索引类型为1的列
df1['start'] = df[df.type == 1].index
答案 1 :(得分:2)
由于您知道这些值是交替的,并且因为我们知道第一个值将是1
,所以我们可以在此处与assign
一起使用简单切片:
df[1::2].assign(start=df[::2].index)
type start
2016-09-22 06:13:00 2 2016-09-22 04:13:00
2016-09-22 06:47:00 2 2016-09-22 06:26:00
2016-09-22 12:02:00 2 2016-09-22 09:16:00
2016-09-22 16:58:00 2 2016-09-22 16:26:00
如果这不是 保证,
df.loc[df.type.eq(2)].assign(start=df.loc[df.type.eq(1)].index)