首页 > 解决方案 > 比较 CSV 行中的主列表和单个列表

问题描述

我正在尝试使我的课堂自动化,并且将我的学生总数与包含班级和学生的数据框进行比较时遇到了困难。最终,代码将返回完整类的列表。

首先,我的学生总数列表称为all_kids

all_kids=['Kevin', 'Jack', 'Caroline', 'Grace', 'Harry', 'Sam']
df_kids=pd.DataFrame(all_kids)

然后,我的班级信息在一个 CSV 文件中,其中一列是上课时间,一列是该班的学生

姓名 孩子们
英语 凯文、杰克、山姆、理查德
数学 卡罗琳、凯文、哈利、格蕾丝

有没有办法将我的孩子总数与每个班级的孩子进行比较并返回如下内容:

姓名 孩子们 地位
英语 凯文、杰克、山姆、理查德 未满
数学 卡罗琳、凯文、哈利、格蕾丝 满的。

在这里,Math 是满的,因为这四个孩子都出现在 中all_kids,但是 English 是不满的,因为 Richard 没有包含在 中all_kids

谢谢!

标签: pythonpandasstringlistdataframe

解决方案


您可以使用str.splitwithexpand=True拆分Kids列中的字符串,然后使用.isin+.all创建一个布尔掩码,然后使用 withnp.where选择相应的Status

m = df_class['Kids'].str.split(r', ', expand=True).isin(all_kids).all(1)
df_class['Status'] = np.where(m, 'Full', 'Not Full')

或者,您可以splitKids列中的字符串,然后在列表理解中使用以下命令检查set成员资格set.issubset

m = [set(k.split(', ')).issubset(all_kids) for k in df_class['Kids']]
df_class['Status'] = np.where(m, 'Full', 'Not Full')

      Name                           Kids    Status
0  English      Kevin, Jack, Sam, Richard  Not Full
1     Math  Caroline, Kevin, Harry, Grace      Full

推荐阅读