根据连续行值差异拆分数据框

Kal*_*lol 2 python dataframe pandas

我有一个这样的数据框,

df
col1    col2    col3
 1        2      3
 2        5      6
 7        8      9
10       11     12
11       12     13
13       14     15
14       15     16
Run Code Online (Sandbox Code Playgroud)

现在,当两个连续行的 col1 差异大于 1 时,我想从上面创建多个数据框。因此结果数据框将如下所示,

df1
col1    col2    col3
 1        2      3
 2        5      6
df2
col1    col2    col3
 7        8      9
df3
col1    col2    col3
10       11     12
11       12     13
df4
col1    col2    col3
13       14     15
14       15     16
Run Code Online (Sandbox Code Playgroud)

我可以使用 for 循环并存储索引来做到这一点,但这会增加执行时间,寻找一些 pandas 快捷方式或 pythonic 方法来最有效地做到这一点。

yat*_*atu 7

您可以通过采用 来定义自定义石斑鱼diff,检查它何时大于1,然后采用cumsum布尔系列的 。然后按结果分组并从 groupby 对象构建字典:

d = dict(tuple(df.groupby(df.col1.diff().gt(1).cumsum())))

print(d[0])
   col1  col2  col3
0     1     2     3
1     2     5     6

print(d[1])
   col1  col2  col3
2     7     8     9
Run Code Online (Sandbox Code Playgroud)

更详细的细分:

df.assign(difference=(diff:=df.col1.diff()), 
          condition=(gt1:=diff.gt(1)), 
          grouper=gt1.cumsum())

   col1  col2  col3  difference  condition  grouper
0     1     2     3         NaN      False        0
1     2     5     6         1.0      False        0
2     7     8     9         5.0       True        1
3    10    11    12         3.0       True        2
4    11    12    13         1.0      False        2
5    13    14    15         2.0       True        3
6    14    15    16         1.0      False        3
Run Code Online (Sandbox Code Playgroud)