如何按indicator列连续1值分组拆分时间序列DataFrame并保存为CSV
解决方法:拆分时间序列DataFrame中indicator=1的连续行组
普通的groupby('indicator')会把所有indicator=1的行归为一组,不管是否连续。要拆分连续的indicator=1行组,核心是给每个连续组分配唯一标识,再按标识分组处理。
具体实现步骤
生成连续组的唯一标识
先重置索引(方便处理日期索引的情况),然后通过判断每行indicator与上一行是否相同,生成分组标签:# 重置索引,把日期转为普通列 df_reset = df.reset_index() # 当indicator值发生变化时,分组号递增,生成唯一组标识 df_reset['group_id'] = (df_reset['indicator'] != df_reset['indicator'].shift()).cumsum()筛选并拆分目标组
过滤出indicator=1的行,再按生成的group_id分组:# 只保留indicator=1的行 df_indicator1 = df_reset[df_reset['indicator'] == 1] # 按group_id拆分出每个连续行组 groups = df_indicator1.groupby('group_id')逐个保存为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
相关产品推荐
相关产品推荐

