如何在 Python 中合并下一行的开头和当前行的结尾

How to merge next rows' start with current rows' end in Python

例如,如果我有一个如下所示的 DataFrame

对于相同的id和Category,我想只保留第一个开始和最后一个结束的数字,去掉中间的。例如,对于第 0 行和第 1 行,由于它们的 id 都是 A 并且 category 都是 Cat_1,因此 start 将是 1 end 将是 3。 预期输出如下所示:

欢迎使用以下代码探索:

import pandas as pd
data = {'id':  ['A','A','A', 'B', 'B', 'C' , 'D'],
        'start': [1,2,3,4,5,6,7],
        'end': [2,3,4,5,6,7,8],
        'Category':['Cat_1', 'Cat_1', 'Cat_2' , 'Cat_3', 'Cat_3', 'Cat_3', 'Cat_3']
        }

df = pd.DataFrame(data)

您可以使用 groupby + agg,在“结束”时调用 first on "start" and last

out = df.groupby(['id','Category'], as_index=False).agg({'start':'first', 'end':'last'})

输出:

  id Category  start  end
0  A    Cat_1      1    3
1  A    Cat_2      3    4
2  B    Cat_3      4    6
3  C    Cat_3      6    7
4  D    Cat_3      7    8