将偶数和奇数行分成两个新列

时间:2018-09-05 17:03:57

标签: python python-3.x pandas

我有一个简单的(稀疏)时间序列:

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

2 个答案:

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