按照间隔将数据框分组

3

我有一个包含时间间隔和标签的数据框。我需要将与其他行相距一定距离的行分组并聚合。

例如,将开始/结束在3个单位以内的行分组,并将它们的

In [16]: df = pd.DataFrame([
    ...:     [ 1, 3,'a'], [ 4,10,'b'],
    ...:     [15,17,'c'], [18,20,'d'],
    ...:     [27,30,'e'], [31,40,'f'], [41,42,'g'],
    ...:     [50,54,'h']],
    ...:     columns=['start', 'end', 'label'])
    ...:

In [17]: df
Out[17]:
   start  end label
0      1    3     a
1      4   10     b
2     15   17     c
3     18   20     d
4     27   30     e
5     31   40     f
6     41   42     g
7     50   54     h

期望的输出:

In [18]: df_desired = group_by_interval(df)
In [19]: df_desired
Out[19]:
   start  end  label
0      1   10    a b
1     15   20    c d
2     27   30  e f g
3     50   54      h

我该如何在数据框中执行这种按区间分组的操作?

我找到了一个类似的 Stack Overflow 帖子(链接在此),但它有点不同,因为我不知道要事先切割哪些区间。


1
一个问题,start: end 对于一行是否保证不会与另一行的 start: end 重叠?如果你的上面的 DataFrame 中有类似 z 33:34 的东西,情况可能会变得复杂。 - ALollz
这不是...我想我可能需要为此打开另一个问题... - saladi
是的,那种情况非常复杂。 - ALollz
1个回答

4
您可以根据条件和聚合创建一个分组器。
grouper = ((df['start'] - df['end'].shift()) > 3).cumsum()

df.groupby( grouper).agg({'start' : 'first', 'end' : 'last', 'label': lambda x: ' '.join(x)})

    start   end     label
0   1       10      a b
1   15      20      c d
2   27      42      e f g
3   50      54      h

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