Pandas筛选含Event_Label=0的Event_Action所有条目问题
筛选含0值Event_Action的全量数据解决方案
需求说明
我有3.5万条数据,需要筛选并导出所有存在Event_Label为0的Event_Action的全部条目,规则如下:
- 若某Event_Action(如
100-genuine-data-entry-jobs-without-investment:us)存在0值,则保留该Event_Action的所有记录 - 若某Event_Action(如
1099-sales-jobs:us)无0值,则直接排除该Action的所有记录
我的尝试与问题
我先筛选出含0值的Event_Action存入新表zero_instance.xlsx,再执行以下代码合并数据:
df1 = pd.read_excel(pwd + "/zero_instance.xlsx") df2 = pd.read_excel(pwd + "/All Last 7 days data rcom.xlsx") df3 = df1.merge(df2, how='left', left_on='Event_Action', right_on='Event_Action')
但最终只返回了每个Event_Action的第一个实例,无法获取该Action下的所有符合条件的条目。
样本数据
| Event_Action | Event_Label |
|---|---|
| 100-genuine-data-entry-jobs-without-investment:us | 0 |
| 100-genuine-data-entry-jobs-without-investment:us | 20000 |
| 1099-bookkeeping-jobs:us | 0 |
| 1099-sales-jobs:us | 1721341 |
| ... | ... |
正确解决方法
无需拆分表再合并,直接在全量数据上操作更高效,步骤如下:
- 从全量数据中提取所有包含
Event_Label=0的Event_Action(去重) - 用这个Action列表过滤全量数据,保留所有属于这些Action的记录
代码实现
import pandas as pd # 读取全量数据 df = pd.read_excel(pwd + "/All Last 7 days data rcom.xlsx") # 获取所有存在0值的Event_Action(去重) valid_actions = df[df['Event_Label'] == 0]['Event_Action'].unique() # 过滤出所有符合条件的记录 result_df = df[df['Event_Action'].isin(valid_actions)] # 导出结果到Excel result_df.to_excel(pwd + "/filtered_result.xlsx", index=False)
原方法问题分析
之前的合并操作如果zero_instance.xlsx中仅存储了每个Action的单条记录(比如只存了Event_Label=0的那一行),理论上left merge应该能匹配到df2中该Action的所有条目,但可能因为中间表的结构问题(比如存在重复索引、多余列)导致结果异常。上面的方法跳过中间表,直接基于全量数据处理,逻辑更清晰且不易出错。
内容的提问来源于stack exchange,提问作者GIRIXH
相关产品推荐
相关产品推荐

