Pandas:高效提取DataFrame中从0到1的正向跳变值
高效实现Pandas DataFrame的跳变值保留操作
核心规则
仅保留两种场景下的1:
- 第一行中初始值为1的单元格
- 后续行里当前值为1且上一行对应列值为0的单元格
高效实现代码
针对大型数据框,必须使用矢量化操作(避免循环或apply这类低效率方法),代码如下:
import pandas as pd # 构造原始数据框 df = pd.DataFrame({ 'A': [0, 0, 1, 1, 0], 'B': [1, 1, 1, 1, 0], 'C': [0, 1, 1, 0, 1] }) # 初始化结果数据框为全0 result = pd.DataFrame(0, index=df.index, columns=df.columns) # 处理第一行:保留初始为1的值 result.iloc[0] = df.iloc[0] == 1 # 处理后续行:筛选从0跳变到1的单元格 jump_mask = (df == 1) & (df.shift(1) == 0) result.iloc[1:] = jump_mask.iloc[1:] # 转为整数类型(确保输出是0/1而非布尔值) result = result.astype(int)
输出验证
运行后result的结果与需求完全匹配:
A B C 0 0 1 0 1 0 0 1 2 1 0 0 3 0 0 0 4 0 0 1
效率说明
所有操作都是Pandas底层优化的矢量化运算,时间复杂度为O(n)(n为数据框总元素数),远快于逐行循环的O(n²),适合百万级行/列的大型数据框,重复调用也能保持高效。
内容的提问来源于stack exchange,提问作者Simon1994
相关产品推荐
相关产品推荐

