如何用Pandas实现DataFrame OldTop值按标记分段增量计算
实现方案
核心通过分组累计求和实现,无需使用for循环,代码如下:
import pandas as pd # 此处替换为你实际的初始OldTop基准值 initial_old_top = 100 # 1. 生成递增段分组标记:每次遇到No就新增一个分组,保证被No隔开的连续Yes属于同一分组 temp_df['group_id'] = (temp_df['Prevous_Line_Has_Br'] == 'No').cumsum() # 2. 同组内仅对Yes行的buffer做累计求和 temp_df['buffer_cumsum'] = temp_df.groupby('group_id')['buffer'].apply( lambda s: s.where(temp_df['Prevous_Line_Has_Br'] == 'Yes', 0).cumsum() ) # 3. 计算最终OldTop值,No行直接沿用前一行结果 temp_df['OldTop'] = initial_old_top + temp_df['buffer_cumsum'] temp_df['OldTop'] = temp_df['OldTop'].ffill() # 按需删除临时辅助列 temp_df.drop(columns=['group_id', 'buffer_cumsum'], inplace=True)
逻辑说明
- 分组标记可以保证每次遇到
No之后,再次出现Yes时重新开始递增计算 where方法将非Yes行的buffer值置为0,不会计入累计结果ffill()向前填充方法自动将No行的OldTop替换为上一行的有效结果,符合停止递增的需求
内容的提问来源于stack exchange,提问作者Megha Sirisilla
相关产品推荐
相关产品推荐

