如何在 pandas 中根据条件合并时间上连续的行?

3

我有一个看起来像这样的数据集:

   begin   end   type
0  1       3     A
1  3       7     A
2  7       9     A
3  9      15     B
4  15     17     B
5  17     20     A

我想要将同一类型且按时间顺序连续的行分组,使得生成的DataFrame如下所示:

   begin   end   type
0  1       9     A
1  9      17     B
2  17     20     A

我当然可以编写一个函数,检查每一行并且向前搜索直到找到不同类型的行,但是我觉得应该有更简单的方法。在pandas中,什么方法最为常用用来解决这个问题?

我已经看到其他相似问题,但是它们都不适用于我的情况。

1个回答

2

根据您的数据,您可以将 end 列进行移位,并将其与 begin 进行比较:

groups = df.groupby('type')['end'].shift().ne(df['begin']).cumsum()
(df.groupby(['type', groups])
   .agg({'begin':'first', 'end':'last'})
)

输出:

        begin  end
type              
A    1      1    9
     3     17   20
B    2      9   17

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接