选择多个列并根据列表删除值

胡安·巴利亚多利德

我有一个看起来像这样的数据框:

StudentID  Name       Assignment1 Assignment2 Assignment3
0    s1    user1           7           7           -3
1    s2    user2           2          15           10
2    s3    user3          12          10           10
3    s4    user4           6           2           10
4    s5    user5          -2           7            2

我想选择Assignment仅限于此列表的值:

[-3,0,2,4,7,10,12]

所以我想得到的输出是:

Error_values:
StudentID  Name       Assignment1 Assignment2 Assignment3
1    s2    user2           2          15           10
3    s4    user4           6           2           10
4    s5    user5          -2           7            2

Correct_values:
StudentID  Name       Assignment1 Assignment2 Assignment3
0    s1    user1           7           7           -3
2    s3    user3          12          10           10

我到目前为止可以correct_values通过

def loadData(filename):
    raw_data = pd.read_csv(filename)
    return raw_data

def checkErrorsData(raw_data):
    df = pd.DataFrame(np.array(raw_data), columns=raw_data.columns)
    duplicated_Id = df[df.duplicated('StudentID', keep=False)]
    error_data = df[df['Assignment1'].isin([-3,0,2,4,7,10,12])]
    return duplicated_Id, error_data

但是,这需要解决每个列,如何在不键入标签的情况下对所有列执行此操作?

亚力山大

您可以使用.loc创建具有所有分配值的子数据框。然后,您可以isinall一起使用,以识别其中包含所有目标测试值(为行指定axis = 1)。

target_test_values = [-3, 0, 2, 4, 7, 10, 12]
>>> df[df.loc[:, ['Assignment1', 'Assignment2', 'Assignment3']]
       .isin(target_test_values).all(axis=1)]

  StudentID   Name  Assignment1  Assignment2  Assignment3
0        s1  user1            7            7           -3
2        s3  user3           12           10           10

或者,假设您有三个作业:

assignments = 3
>>> df[df.iloc[:, 2:(2+1+assignments)].isin(target_test_values).all(axis=1)]
  StudentID   Name  Assignment1  Assignment2  Assignment3
0        s1  user1            7            7           -3
2        s3  user3           12           10           10

如果在分配之后没有其他列,则可以简单地按如下所示编制索引:

df[df.iloc[:, 2:].isin(target_test_values).all(axis=1)]

为了获得错误值,您只需要使用tilda(〜)取反:

>>> df[~df.iloc[:, 2:].isin(target_test_values).all(axis=1)]
  StudentID   Name  Assignment1  Assignment2  Assignment3
1        s2  user2            2           15           10
3        s4  user4            6            2           10
4        s5  user5           -2            7            2

将布尔值索引分配给掩码的效率更高,如下所示:

mask = df.iloc[:, 2:].isin(target_test_values).all(axis=1)
correct_values = df[mask]
error_values = df[~mask]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据多个其他列值选择列

来自分类Dev

根据列标题值在多个工作表中删除列

来自分类Dev

根据多个字段或列从列表中删除重复项

来自分类Dev

选择多个列表中有多个列值的行

来自分类Dev

根据pandas数据框中的多个列值选择行

来自分类Dev

根据pandas列中的多个值从DataFrame中选择行

来自分类Dev

根据SQLite中的多个列值选择行

来自分类Dev

根据列值从单个表中选择多个间隔

来自分类Dev

根据列删除值

来自分类Dev

熊猫-根据列列表中的值选择行

来自分类Dev

根据列值从列表中选择数据框

来自分类Dev

根据最大列值从列表中选择数据框

来自分类Dev

根据列值在列表中删除数据框

来自分类Dev

根据列的列表项中的值删除行

来自分类Dev

根据列值选择列

来自分类Dev

进行SQL查询以从多个列中选择值列表

来自分类Dev

根据列值删除Pandas中的DataFrame行-要删除的多个值

来自分类Dev

<选择>列表中的多个值

来自分类Dev

根据行值选择列

来自分类Dev

根据列值选择多行

来自分类Dev

根据行值选择列

来自分类Dev

根据先前对下拉列表的选择,删除“选择下拉列表”选项

来自分类Dev

根据列值删除行

来自分类Dev

根据行值删除列

来自分类Dev

根据位置从列表中删除多个元素

来自分类Dev

根据数据库值在列表框中预先选择多个项目

来自分类Dev

WP8-列表选择器-根据第一列表选择器值过滤第二列表选择器值

来自分类Dev

根据选择值添加/删除表行

来自分类Dev

根据多个选择值显示图像