基于Pandas DataFrame按ID统计关联最后关键词的end次数
解决思路
针对每个case_id,我们需要:
- 定位该分组内
text列最后出现的目标关键词(hire/career) - 检查该关键词出现位置之后的行中,是否存在
reason列等于end的记录 - 对满足条件的关键词进行计数
实现代码
import pandas as pd # 从text列提取目标关键词 def get_target_keyword(text_content): text_str = str(text_content) if 'hire' in text_str: return 'hire' elif 'career' in text_str: return 'career' return None # 预处理:添加关键词标记列 df['target_keyword'] = df['text'].apply(get_target_keyword) # 初始化计数字典 keyword_count = {'hire': 0, 'career': 0} # 按case_id分组处理 for _, group in df.groupby('case_id'): # 筛选出包含目标关键词的行 keyword_records = group[group['target_keyword'].notna()] if keyword_records.empty: continue # 获取该分组最后出现的关键词 last_keyword = keyword_records.iloc[-1]['target_keyword'] # 获取最后关键词行的索引 last_keyword_pos = keyword_records.iloc[-1].name # 检查关键词之后是否存在reason为'end'的记录 has_end_after = (group.loc[group.index > last_keyword_pos, 'reason'] == 'end').any() if has_end_after: keyword_count[last_keyword] += 1 # 转换为结果DataFrame result_df = pd.DataFrame(list(keyword_count.items()), columns=['keyword', 'count']) print(result_df)
代码解释
- 关键词提取:通过自定义函数
get_target_keyword识别每行text中的目标关键词,生成辅助列target_keyword - 分组处理:按
case_id分组后,先过滤出该组内所有含关键词的行,若没有则直接跳过 - 最后关键词定位:取分组内最后一条含关键词的记录,确定触发关键词
- end检查:判断该关键词出现位置之后的行中是否存在
reason='end'的记录,若存在则对应关键词计数+1 - 结果输出:将计数字典转换为DataFrame,得到最终统计结果
内容的提问来源于stack exchange,提问作者sandy
相关产品推荐
相关产品推荐

