繁体   English   中英

比较 CSV 行中的主列表与单个列表

[英]Comparing Master List to Individual lists in a CSV row

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

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

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

然后,我的 class 信息在 CSV 文件中,其中一列是 class 期间,一列是 ZA2F21ED4F8EBC2ABCBB4DC 中的学生

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

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

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

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

谢谢!

您可以使用带有expand=Truestr.split来拆分Kids列中的字符串,然后使用.isin + .all创建一个 boolean 掩码,然后将其与np.where一起使用到 select 相应的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.issubset检查set成员资格:

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

您需要做的是检查 all_kids 中是否存在“Kids”变量中的每个名称。 在逻辑上,意思是从每一行Kids中排除all_kids ,看是否为空。 当然,您首先需要将Kids str 列拆分为一列列表:

这段代码对我有用:


import numpy as np
import pandas as pd 

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


df = pd.DataFrame(None, columns =  ['Name', 'Kids'])
df.loc[0] = ['English', 'Kevin, Jack, Sam, Richard']
df.loc[1] = ['Math', 'Caroline, Kevin, Harry, Grace']

df['list'] = df['Kids'].apply(lambda s : s.split(', '))
df['diff'] = df['list'].apply(lambda s : [elt for elt in s if elt not in all_kids]).apply(len)
df['Status'] = np.where(df['diff'] == 0, 'Full', 'Not Full')
      Name                           Kids  ... diff    Status
0  English      Kevin, Jack, Sam, Richard  ...    1  Not Full
1     Math  Caroline, Kevin, Harry, Grace  ...    0      Full

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM