如何在Pandas中删除decline行及其后续的constant行
Pandas数据筛选:保留increase及后续constant,删除decline及后续constant
问题背景
给定以下Pandas DataFrame:
import pandas as pd df = pd.DataFrame({"changes":['increase', 'constant', 'constant', 'constant', 'decline', 'constant', 'constant', 'increase', 'constant', 'constant', 'constant','decline', 'constant', 'constant', 'constant']})
原始数据表格:
| changes |
|---|
| increase |
| constant |
| constant |
| constant |
| decline |
| constant |
| constant |
| increase |
| constant |
| constant |
| constant |
| decline |
| constant |
| constant |
| constant |
需求:删除所有包含decline的行及其之后连续的constant行,同时保留包含increase的行及其之后连续的constant行,预期输出如下:
| changes |
|---|
| increase |
| constant |
| constant |
| constant |
| increase |
| constant |
| constant |
| constant |
解决方法
核心思路是通过分组标记,把increase或decline作为分组起点,过滤掉以decline开头的分组:
# 生成分组标识:遇到increase或decline时,分组序号递增 df['group'] = (df['changes'].isin(['increase', 'decline'])).cumsum() # 获取每个分组的首个元素,筛选出非decline开头的分组 valid_groups = df.groupby('group')['changes'].first()[lambda x: x != 'decline'].index # 筛选保留的行并删除临时分组列 result_df = df[df['group'].isin(valid_groups)].drop(columns='group') # 查看结果 print(result_df)
结果验证
运行上述代码后,输出结果与预期完全一致。
内容的提问来源于stack exchange,提问作者DeleLinus
相关产品推荐
相关产品推荐

