Pandas:如果前两列中的值是连续的,则将值添加到 table 中的两个新列?

Pandas: add values to two new columns in table if values in two previous columns are continuous?

所以,我试图在 SQL 中完成此操作,但被告知在 Pandas 中会有一种简单的方法来完成此操作...非常感谢您的 help/hints!

我目前在左侧有 table 两列(开始子会话和结束子会话),我想添加两个左边的列 "session start" 和 "session end"。我知道如何简单地添加列,但我无法弄清楚允许我识别两个原始列中的连续值的查询(即结束子会话值与下一行开始子 -会话值),然后将第一个开始会话值和最后一个结束会话值(对于连续行)添加到我的新列中的相应行。请参考图片。例如,对于前三行,"end subsession" 值与下一行 "begin subsession" 值相同,因此前三个 "session start" 和 "session end" 将是相同的,具有 "begin subsession" 值中的最小值和 "end sub session" 值中的最大值。

我在 SQL 中按照这些思路尝试了一些东西,显然没有用,我意识到聚合函数在这种情况下不起作用...

SELECT
FROM viewershipContinuous =
    CASE 
        WHEN endSubsession.ROWID = beginSubession.ROWID+1
        THEN MIN(beginSubsession)
        ELSE beginSubsession.ROWID+1
        END;

左边的table是我有的,右边的table是我想达到的

您可以先比较下一个值 shifted column esub with column bsub if not equal (!=) and then create groups by cumsum:

s = df['bsub'].ne(df['esub'].shift()).cumsum()
print (s)
0    1
1    1
2    1
3    2
4    2
5    2
6    2
7    3
8    3
dtype: int32

然后 groupby by Series s with transform minmax:

g = df.groupby(s)
df['session start'] = g['bsub'].transform('min')
df['session end'] = g['esub'].transform('max')
print (df)
   bsub  esub  session start  session end
0  1700  1705           1700         1800
1  1705  1730           1700         1800
2  1730  1800           1700         1800
3  1900  1920           1900         1965
4  1920  1950           1900         1965
5  1950  1960           1900         1965
6  1960  1965           1900         1965
7  2000  2001           2000         2002
8  2001  2002           2000         2002