Pandas中flag列连续5次及以上为1时如何将flag1对应值设为1
Pandas 实现连续值判定并修改对应列
现有包含flag、flag1两列的Pandas DataFrame,需实现如下逻辑:若flag列连续出现5次及以上取值大于1,则将对应行的flag1列值修改为1。
实现代码
import pandas as pd # 构造测试数据 df = pd.DataFrame({'flag':[0,0,2,2,2,2,2,2,2,0,0,0],'flag1':[0,0,0,0,0,0,0,0,0,0,0,0]}) # 核心逻辑 mask = df['flag'] > 1 groups = (~mask).cumsum() df.loc[mask.groupby(groups).transform('count') >= 5, 'flag1'] = 1 # 输出结果验证 print(df)
逻辑说明
- 首先生成布尔掩码
mask,标记所有flag取值大于1的行 - 对掩码取反后累加求和,将连续满足
flag>1的行划分到同一分组 - 统计每个分组的长度,筛选出长度≥5的分组,将对应行的
flag1赋值为1
提示:如果实际需求是判定
flag≥1(匹配你给出的示例取值),只需将mask = df['flag'] > 1修改为mask = df['flag'] >= 1即可。
内容的提问来源于stack exchange,提问作者Edward
相关产品推荐
相关产品推荐

