根据不在另一个数据集中的值过滤一个数据集

时间:2018-08-09 17:28:39

标签: python pandas function filter formatting

我希望根据某个ID 是否是否出现在其他数据框中来过滤数据集。

虽然如果我不熟悉更好的方法,那么我对执行决定的方法并不太满意,但是我想将Boolean函数应用于数据集,然后将结果放入新列,然后从该True / False结果中过滤掉整个数据集。

我的主要数据帧是df,而其他包含ID的数据帧称为ID

def groups():
    if df['owner_id'] not in ID['owner_id']:
        return True
    return False

这最终被接受(没有语法问题),因此我将其应用于我的数据框,但失败了:

df['ID Groups?'] = df.apply (lambda row: groups() ,axis=1)

结果:

TypeError: ("'Series' objects are mutable, thus they cannot be hashed", 'occurred at index 0')

似乎我要使用的数据某处(ID既是字母又是数字,因此是字符串)的格式不正确。

我有两个问题:

  1. 我提出的方法是解决此问题的最佳方法吗?
  2. 如何解决我看到的错误?

我很抱歉,如果这很明显,我对Python和整个编码的接触非常有限,但是我找不到任何地方已经解决了此类问题。

1 个答案:

答案 0 :(得分:1)

仅保留df中与owner_id中的ID相匹配的这些行的表达式:

df = df[df['owner_id'].isin(ID['owner_id'])]

Lambda表达式的速度将比这慢。

isin是熊猫的方式。 not in是Python的收集方式。

出现此错误的原因是左侧的df['owner_id'] not in ID['owner_id']散列以弄清楚右侧是否存在该错误。据报道,df['owner_id']的类型为Series,不可散列。幸运的是,它不是必需的。