isin()重新认识

11:11

x是一个series,x.isin(y)返回的是个bool series,长度和x一样。

要从df中筛选出MisconceptionAId MisconceptionBId MisconceptionCId MisconceptionDId 同时包含在这个列表中的数据,也就是说,如果MisconceptionAId MisconceptionBId MisconceptionCId MisconceptionDId中有任意一个数不包含在misconception列表中,就剔除掉。非常优雅的实现:

 

misconception_columns = ['MisconceptionAId', 'MisconceptionBId', 'MisconceptionCId', 'MisconceptionDId']

misconception_list = mis_competition['MisconceptionId']

# 创建一个布尔掩码,检查每一行的所有Misconception列是否都在列表中或为NaN

mask = train_systhetic[misconception_columns].apply(

    lambda x: x.isin(misconception_list) | x.isna()

).all(axis=1)

filtered_df = train_systhetic[mask]

 

已使用 OneNote 创建。