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 方法来最有效地做到这一点。
您可以通过采用 来定义自定义石斑鱼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)
| 归档时间: |
|
| 查看次数: |
1051 次 |
| 最近记录: |