You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于多行列匹配移除Pandas数据行,筛选仅保留Added行

Pandas 处理成对 Added/Removed 行并保留有效 Added 行

需求说明:
在已完成Event_Time转datetime类型、按Name分组并按时间排序的Pandas DataFrame中,移除所有满足「前一行Action为Added且当前行Action为Removed」的成对行,最终仅保留有效的Added行。

示例输入数据:

import pandas as pd
df = pd.DataFrame({'Event_Time': ['2024-05-28 12:37:00', '2024-05-28 12:41:00', '2024-05-28 16:12:00','2024-05-08 09:40:00'], 
                   'Name': ['Kenzie Doe', 'Kenzie Doe', 'Kenzie Doe', 'Abby Stone'],
                  'Action': ['Added', 'Removed', 'Added', 'Added']})

解决方案

Python完全支持这类多行列操作,具体步骤如下:

  1. 预处理:转换时间类型并排序
    确保Event_Time为可排序的datetime类型,再按Name分组、时间排序:
df['Event_Time'] = pd.to_datetime(df['Event_Time'])
df = df.sort_values(['Name', 'Event_Time']).reset_index(drop=True)
  1. 标记需要删除的成对行
    先定位「当前行是Removed且前一行是Added」的行,再把对应的前一行也标记为待删除:
# 标记当前行是Removed且前一行是Added的情况
mask_remove = (df['Action'] == 'Removed') & (df['Action'].shift(1) == 'Added')
# 扩展标记到对应的前一行(Added行)
mask_to_drop = mask_remove | mask_remove.shift(-1).fillna(False)
  1. 过滤并保留有效Added行
    剔除标记的行后,再筛选出Action为Added的行:
result = df[~mask_to_drop].query("Action == 'Added'").reset_index(drop=True)

最终结果

Event_TimeNameAction
2024-05-08 09:40:00Abby StoneAdded
2024-05-28 16:12:00Kenzie DoeAdded

内容的提问来源于stack exchange,提问作者Zayetzy Luna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 21:50:59