Python Pandas如何基于条件创建修正后的累积生产列
方案实现
你可以通过分组识别多轮生产序列的方式解决该问题,以下是两种常见业务场景的实现:
场景1:每轮生产的0值填充该轮次最终累积产量
适合多轮生产独立统计,轮次之间的产量不需要累加的场景:
import pandas as pd data = {'CummulativeProdution':[100,200,300,0,0,0,100,200,300,0,0,0] } df = pd.DataFrame(data) # 标记非0生产区间 mask = df['CummulativeProdution'] != 0 # 给每一轮生产分配唯一分组ID df['group_id'] = mask.ne(mask.shift()).cumsum() // 2 # 每个分组用该轮最高累积值填充所有行 df['corrected Cummulative Column'] = df.groupby('group_id')['CummulativeProdution'].transform('max') # 可选:删除中间辅助列 df = df.drop(columns='group_id')
运行后修正列结果为:[100,200,300,300,300,300,100,200,300,300,300,300]
场景2:全局连续累积产量
适合所有轮次产量累计统计,新轮次产量叠加到历史总累积的场景:
import pandas as pd data = {'CummulativeProdution':[100,200,300,0,0,0,100,200,300,0,0,0] } df = pd.DataFrame(data) # 计算单日产油量,处理新轮次产量跳变的情况 df['daily_prod'] = df['CummulativeProdution'].diff() df.loc[(df['CummulativeProdution'] != 0) & (df['daily_prod'] < 0), 'daily_prod'] = df['CummulativeProdution'] # 全局累加得到连续累积值 df['corrected Cummulative Column'] = df['daily_prod'].cumsum() # 可选:删除中间辅助列 df = df.drop(columns='daily_prod')
运行后修正列结果为:[100,200,300,300,300,300,400,500,600,600,600,600]
内容的提问来源于stack exchange,提问作者johnson
相关产品推荐
相关产品推荐

