You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按indicator列连续1值分组拆分时间序列DataFrame并保存为CSV

解决方法:拆分时间序列DataFrame中indicator=1的连续行组

普通的groupby('indicator')会把所有indicator=1的行归为一组,不管是否连续。要拆分连续的indicator=1行组,核心是给每个连续组分配唯一标识,再按标识分组处理。

具体实现步骤

  1. 生成连续组的唯一标识
    先重置索引(方便处理日期索引的情况),然后通过判断每行indicator与上一行是否相同,生成分组标签:

    # 重置索引,把日期转为普通列
    df_reset = df.reset_index()
    # 当indicator值发生变化时,分组号递增,生成唯一组标识
    df_reset['group_id'] = (df_reset['indicator'] != df_reset['indicator'].shift()).cumsum()
    
  2. 筛选并拆分目标组
    过滤出indicator=1的行,再按生成的group_id分组:

    # 只保留indicator=1的行
    df_indicator1 = df_reset[df_reset['indicator'] == 1]
    # 按group_id拆分出每个连续行组
    groups = df_indicator1.groupby('group_id')
    
  3. 逐个保存为CSV文件
    遍历分组,按indicator1-序号.csv的规则保存文件:

    for idx, (_, group_df) in enumerate(groups, start=1):
        # 恢复原日期索引(可选,根据需求调整)
        group_df = group_df.set_index('index')
        # 保存为CSV
        group_df.to_csv(f'indicator1-{idx}.csv')
    

完整示例代码

import pandas as pd

# 模拟你的时间序列数据
data = {
    'indicator': [0,0,1,1,1,0,0,0,1,1,0],
    'col1': range(11),
    'col2': range(100, 111)
}
dates = pd.date_range('2022-03-01', periods=11)
df = pd.DataFrame(data, index=dates)

# 生成连续组标识
df_reset = df.reset_index()
df_reset['group_id'] = (df_reset['indicator'] != df_reset['indicator'].shift()).cumsum()

# 筛选并拆分
df_indicator1 = df_reset[df_reset['indicator'] == 1]
groups = df_indicator1.groupby('group_id')

# 保存文件
for idx, (_, group_df) in enumerate(groups, 1):
    group_df = group_df.set_index('index')
    group_df.to_csv(f'indicator1-{idx}.csv')

运行后会生成indicator1-1.csv(对应2022-03-04至2022-03-06)和indicator1-2.csv(对应2022-03-10至2022-03-11)两个文件。

内容的提问来源于stack exchange,提问作者chorink65

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 17:15:53