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

如何筛选含1-0-1中断模式的ID?月度dummy列数据集处理

解决方案

针对你的需求(识别月度序列中存在「两个1之间夹0」的ID并标记),以下是两种主流数据处理工具的高效实现方法,适配26万行的大数据量:

Python(Pandas)

方法1:基于差分判断(高效矢量化操作)

核心逻辑:如果序列中同时出现「1→0」(差分=-1)和「0→1」(差分=+1),说明存在中断模式。

import pandas as pd

# 假设你的数据集已读入为df
df = pd.read_csv("your_data.csv")

# 筛选所有月度dummy列(列名以m开头)
month_cols = [col for col in df.columns if col.startswith('m')]

# 计算每行月度列的相邻差分
df_diff = df[month_cols].diff(axis=1)

# 标记是否存在中断模式:同时出现过1→0和0→1的转换
df['has_interruption'] = (df_diff.eq(-1).any(axis=1)) & (df_diff.eq(1).any(axis=1))

方法2:基于字符串匹配(直观易理解)

核心逻辑:将每行的月度序列转为字符串,匹配「1后面跟着至少一个0再跟1」的模式(正则10+1)。

import pandas as pd

df = pd.read_csv("your_data.csv")
month_cols = [col for col in df.columns if col.startswith('m')]

# 拼接每行的月度值为字符串,再匹配中断模式
df['has_interruption'] = df[month_cols].astype(str).agg(''.join, axis=1).str.contains(r'10+1')

两种方法均为矢量化操作,处理26万行数据速度极快,推荐优先使用方法1。

R语言

方法1:字符串匹配(高效无循环)

library(dplyr)
library(stringr)

# 读入数据
df <- read.csv("your_data.csv")

# 筛选月度列
month_cols <- starts_with("m", vars = colnames(df))

# 拼接每行月度值为字符串,匹配中断模式
df <- df %>%
  mutate(has_interruption = str_detect(do.call(paste0, across(all_of(month_cols))), "10+1"))

方法2:基于差分判断

library(dplyr)

df <- read.csv("your_data.csv")
month_cols <- starts_with("m", vars = colnames(df))

# 按行计算差分并判断
df <- df %>%
  rowwise() %>%
  mutate(
    diff_vals = diff(c_across(all_of(month_cols))),
    has_interruption = any(diff_vals == -1) & any(diff_vals == 1)
  ) %>%
  ungroup() %>%
  select(-diff_vals)

注意:rowwise()在处理26万行时速度略慢,优先推荐方法1。

结果验证

以你提供的示例数据为例:

  • ID 07W77348、07W79970、07W83630会被标记为True(存在中断)
  • ID 07W85211(全1)、07W90765(先0后1再0)、08W03543(先1后0)等会被标记为False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 21:25:05