按ID分组筛选数据集行:基于下一行值保留指定行
数据集行筛选实现方案
原始数据集
| ID | Value1 | Value2 |
|---|---|---|
| A | 1 | 0 |
| A | 0 | 1 |
| A | 1 | 1 |
| A | 0 | 1 |
| A | 0 | 0 |
| A | 0 | 0 |
| A | 1 | 0 |
| A | 1 | 1 |
| A | 0 | 1 |
筛选规则
筛选规则:当某行的Value1字段等于1,且其紧邻下一行的Value2字段等于1时,同时保留这两行;其余ID为A的行均不保留。
期望输出结果
| ID | Value1 | Value2 |
|---|---|---|
| A | 1 | 0 |
| A | 0 | 1 |
| A | 1 | 1 |
| A | 0 | 1 |
| A | 1 | 0 |
| A | 1 | 1 |
| A | 0 | 1 |
实现方法(基于Pandas)
以下是使用Python Pandas库实现该筛选逻辑的代码:
import pandas as pd # 加载或构造数据集 data = { 'ID': ['A']*9, 'Value1': [1,0,1,0,0,0,1,1,0], 'Value2': [0,1,1,1,0,0,0,1,1] } df = pd.DataFrame(data) # 生成保留标记:当前行是否触发保留条件,下一行是否需要保留 df['keep_current'] = (df['Value1'] == 1) & (df['Value2'].shift(-1) == 1) df['keep_next'] = df['keep_current'].shift(1).fillna(False) # 筛选目标行并移除辅助列 result_df = df[df['keep_current'] | df['keep_next']].drop(columns=['keep_current', 'keep_next']) # 输出结果 print(result_df.to_string(index=False))
代码说明
df['Value2'].shift(-1):将Value2列向下偏移一行,获取当前行的下一行Value2值keep_current:标记当前行是否满足触发条件(Value1=1且下一行Value2=1)keep_next:标记当前行是否是上一个触发行的下一行,需要同步保留- 最终通过逻辑或筛选出所有需要保留的行,移除辅助列后得到目标结果
内容的提问来源于stack exchange,提问作者JeffWithpetersen
相关产品推荐
相关产品推荐

