如何用Pandas对比组内数据并返回布尔值?组内日期匹配查询
Got it,这个需求咱们用Pandas的分组+自定义函数就能轻松搞定,我给你拆解一下步骤,保证清晰易懂:
Pandas分组匹配指定行并返回结果
1. 编写分组处理的自定义函数
我们需要给每个分组单独做判断:先拿到分组首行的end_date,再找组内begin_date等于这个值的第一行,返回它的type;如果没找到匹配项,就返回'non-existent'。
代码实现如下:
def get_matching_type(group): # 获取当前分组第一行的end_date作为目标日期 target_date = group.iloc[0]['end_date'] # 筛选出组内begin_date等于目标日期的行 matched_rows = group[group['begin_date'] == target_date] # 返回结果:有匹配则取第一个行的type,无匹配返回指定字符串 return matched_rows.iloc[0]['type'] if not matched_rows.empty else 'non-existent'
2. 分组应用函数得到结果
接下来对原DataFrame按ID分组,把上面的函数应用进去即可:
# 假设你的数据存储在变量df中 result_series = df.groupby('ID').apply(get_matching_type)
这时候result_series是一个Series,索引为ID,值就是每个ID分组对应的匹配结果。用你给出的示例数据测试的话,ID=1的结果就是Superhero,完全符合预期。
可选:将结果合并回原DataFrame
如果想让原表的每一行都带上这个匹配结果,直接用map映射即可:
df['matched_type'] = df['ID'].map(result_series)
这样原DataFrame会新增一列matched_type,所有同ID的行都会显示对应的匹配结果。
内容的提问来源于stack exchange,提问作者CandleWax
相关产品推荐
相关产品推荐

