如何根据TimeDelta阈值拆分原DataFrame生成多个独立子DataFrame
该需求可以通过Pandas的分组功能快速实现,具体操作如下:
核心实现逻辑
- 首先对TimeDelta字段做数值化处理,兼容首行的占位符/空值
- 生成分组标记序列:首行默认为新分组起点,后续每行只要TimeDelta大于阈值就标记为新分组起点
- 对分组标记做累加得到分组ID,按ID拆分即可得到所有子DataFrame
完整代码示例
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'time': [1,3,4,7,8], 'parameter': [800,788,544,344,244], 'TimeDelta': ['-',2,1,3,1] }) # 1. 处理TimeDelta列为数值类型,首行'-'替换为0不影响分组判断 df['TimeDelta'] = pd.to_numeric(df['TimeDelta'], errors='coerce').fillna(0) # 2. 设置拆分阈值 threshold = 1.5 # 3. 生成分组ID group_flag = df['TimeDelta'] > threshold group_flag.iloc[0] = True # 强制第一行作为首个分组起点 df['group_id'] = group_flag.cumsum() # 4. 拆分得到子DataFrame列表,不需要group_id可在reset_index后drop该字段 sub_dfs = [group.reset_index(drop=True).drop('group_id', axis=1) for _, group in df.groupby('group_id')]
结果验证
上述示例运行后sub_dfs会包含3个独立DataFrame,分别对应:
- 第1个:包含原数据time=1的行
- 第2个:包含原数据time=3、4的行
- 第3个:包含原数据time=7、8的行
完全符合需求预期。
内容的提问来源于stack exchange,提问作者Adler Müller
相关产品推荐
相关产品推荐

