如何根据温度连续高于0的条件拆分DataFrame为多个子DataFrame
拆分DataFrame为温度连续高于0的独立片段
示例数据构造
先还原你的示例DataFrame:
import pandas as pd data = { "日期": ["2022-05-20"]*9, "时间": ["4:16", "4:17", "4:18", "4:19", "4:34", "4:39", "4:48", "4:49", "4:59"], "温度": [32, 16, 0, 7, 75, 5, 0, 0, 83] } df = pd.DataFrame(data)
拆分方法
核心思路是识别温度连续高于0的片段,给每个片段分配唯一分组ID,再按ID拆分:
# 1. 标记温度是否大于0 df['is_above_zero'] = df['温度'] > 0 # 2. 生成连续段的分组键:当温度从<=0变为>0时,分组ID递增 df['group_id'] = (df['is_above_zero'] & ~df['is_above_zero'].shift(fill_value=False)).cumsum() # 3. 过滤掉温度<=0的组,然后按group_id拆分 result_dfs = [group for _, group in df[df['is_above_zero']].groupby('group_id')]
输出结果
现在result_dfs就是你要的三个独立DataFrame:
- 第一个DataFrame:
| 日期 | 时间 | 温度 |
|---|---|---|
| 2022-05-20 | 4:16 | 32 |
| 2022-05-20 | 4:17 | 16 |
- 第二个DataFrame:
| 日期 | 时间 | 温度 |
|---|---|---|
| 2022-05-20 | 4:19 | 7 |
| 2022-05-20 | 4:34 | 75 |
| 2022-05-20 | 4:39 | 5 |
- 第三个DataFrame:
| 日期 | 时间 | 温度 |
|---|---|---|
| 2022-05-20 | 4:59 | 83 |
代码解释
is_above_zero列:简单标记每行温度是否符合条件group_id生成:通过shift()对比当前行和上一行的状态,当状态从False变为True时,cumsum()会让分组ID加1,这样连续的True行就会分到同一个组- 最后过滤掉非目标行,按分组ID拆分得到多个独立DataFrame
内容的提问来源于stack exchange,提问作者Nadka
相关产品推荐
相关产品推荐

