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

如何基于Pandas DataFrame中的连续值修改布尔类型字段

解决同一ID下连续4个月Total为0时修改"Valid or Missing"字段的问题

首先得确保数据按ID和时间顺序排列,才能准确识别连续月份的记录,之后再针对性修改目标字段。以下是具体实现步骤:

步骤1:转换日期字段并排序

先把Year_Month转为日期类型,保证每个ID下的记录按时间先后排序——这是识别连续月份的基础:

# 转换Year_Month为日期格式
df['Year_Month'] = pd.to_datetime(df['Year_Month'], format='%Y-%m')
# 按ID和时间排序
df = df.sort_values(['ID', 'Year_Month']).reset_index(drop=True)

步骤2:识别连续Total为0的分组

通过分组后计算连续0值的分组标识,用cumsum标记不同的连续区间:

# 按ID分组,标记非0的行,然后计算cumsum得到连续区间的ID
df['zero_group'] = df.groupby('ID')['Total'].apply(lambda x: (x != 0).cumsum())

这里每遇到一个非0的Total,zero_group的值就会加1,同一连续0值的区间会拥有相同的zero_group值。

步骤3:标记符合条件的记录

筛选出连续4个月及以上Total为0的区间,标记这些区间内的所有记录:

# 统计每个zero_group的行数,筛选出行数>=4且全为0的组
valid_groups = df.groupby(['ID', 'zero_group']).filter(lambda x: len(x) >=4 and (x['Total'] == 0).all())['zero_group'].unique()
# 标记需要修改的记录
df['need_update'] = df['zero_group'].isin(valid_groups) & (df['Total'] == 0)

步骤4:更新"Valid or Missing"字段

对标记为需要更新的记录,将"Valid or Missing"从True改为False,False保持不变:

# 应用更新逻辑
df.loc[df['need_update'] & df['Valid or Missing'], 'Valid or Missing'] = False
# 可选:删除临时生成的辅助列
df = df.drop(['zero_group', 'need_update'], axis=1)

完整代码

整合所有步骤的完整代码如下:

import pandas as pd

# 转换日期并排序
df['Year_Month'] = pd.to_datetime(df['Year_Month'], format='%Y-%m')
df = df.sort_values(['ID', 'Year_Month']).reset_index(drop=True)

# 标记连续0值的分组
df['zero_group'] = df.groupby('ID')['Total'].apply(lambda x: (x != 0).cumsum())

# 筛选符合条件的组并标记需要更新的记录
valid_groups = df.groupby(['ID', 'zero_group']).filter(lambda x: len(x) >=4 and (x['Total'] == 0).all())['zero_group'].unique()
df['need_update'] = df['zero_group'].isin(valid_groups) & (df['Total'] == 0)

# 更新字段
df.loc[df['need_update'] & df['Valid or Missing'], 'Valid or Missing'] = False

# 清理临时列
df = df.drop(['zero_group', 'need_update'], axis=1)

这样就完成了需求:同一ID下连续4个月Total为0的记录,只要"Valid or Missing"是True,就会被改为False,已经是False的保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:10:03