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

如何在Pandas左连接中获取缴费信息缺失的学生记录

找出缴费信息缺失的学生详情

我来帮你搞定这个需求!要找出那些在Fee表中没有缴费记录的学生,核心思路是利用Class、Section、RollNo这三个唯一标识字段,将两个表进行匹配,然后筛选出匹配失败的学生记录。下面是具体的实现步骤和代码:

方法一:左连接+空值筛选(最直观)

这是最常用的方法,通过左连接保留所有学生记录,再找出Fee表无匹配的行:

1. 构造示例数据

首先我们先把两个DataFrame补全(模拟Fee表缺失部分记录的场景):

import pandas as pd

# 学生信息表
Students = pd.DataFrame({ 
    'Class': [7, 7, 8], 
    'Section': ['A', 'B', 'B'], 
    'RollNo': [2, 3, 4], 
    'Student': ['Ram', 'Rahim', 'Robert'] 
})

# 缴费信息表(这里故意缺失RollNo=4的Robert的缴费记录)
Fee = pd.DataFrame({ 
    'Class': [7, 7, 8], 
    'Section': ['A', 'B', 'B'], 
    'RollNo': [2, 3, 5], 
    'FeePaid': [True, True, True] 
})

2. 左连接匹配两张表

用merge方法做左连接,确保Students的所有记录都被保留:

# 基于三个唯一字段做左连接
merged_df = Students.merge(Fee, on=['Class', 'Section', 'RollNo'], how='left')

3. 筛选缴费信息缺失的学生

左连接后,Fee表无匹配的行对应的Fee字段会是NaN,我们以此为依据筛选:

# 找出FeePaid为空的记录(即缴费信息缺失)
missing_fee_students = merged_df[merged_df['FeePaid'].isna()]

# 只保留学生详情字段,去掉空的缴费列
missing_fee_students = missing_fee_students[Students.columns]

4. 查看结果

运行后输出的结果就是缴费信息缺失的学生:

Class Section  RollNo Student
2      8       B       4  Robert

方法二:利用索引匹配(适合Fee表有重复记录的场景)

如果Fee表中存在重复的缴费记录,我们可以先提取已缴费学生的唯一标识组合,再筛选Students中不在这个组合里的学生:

# 提取Fee表中已缴费学生的唯一标识(去重后)
fee_paid_unique_ids = Fee[['Class', 'Section', 'RollNo']].drop_duplicates()

# 将两个表的三个字段设为索引,判断Students的索引是否不在已缴费索引中
missing_fee_students = Students[
    ~Students.set_index(['Class', 'Section', 'RollNo']).index.isin(
        fee_paid_unique_ids.set_index(['Class', 'Section', 'RollNo']).index
    )
]

这个方法同样能得到和上面一致的结果,而且避免了Fee表重复记录的干扰。

内容的提问来源于stack exchange,提问作者Narendra Gadidasu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:53:32