python - 比较 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
。
谢谢!
解决方案
您可以使用str.split
withexpand=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')
或者,您可以split
在Kids
列中的字符串,然后在列表理解中使用以下命令检查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
推荐阅读
- android - 如何在 webView 中使用私有 url?
- ios - 使用 UNLocationNotificationTrigger
- mysql - Mariadb 服务器启动失败(code=killed)
- xcode - Xcodebuild:找不到与提供的目标说明符匹配的目标
- c++ - C++ 内核的 Jupyter 笔记本错误 [cling]
- powershell - 为什么 powershell 正则表达式不能与 \n 一起使用?
- android - 如何将类实例作为参数提供给 Kotlin 函数
- c++ - 您如何编码将不同的可执行文件合并到一个窗口框架中?像浏览器一样?
- python - 熊猫将数据框与条件合并
- html - 如何使用 react-native-render-html 从包含电话号码或电子邮件的 html 内容中单击打开电话应用程序或电子邮件?