根据不在另一个数据集中的值筛选数据集



我希望根据某个ID是否未出现在不同的数据帧中来过滤数据集。

虽然我不太执着于我决定这样做的方式,如果有我不熟悉的更好方法,但我想将布尔函数应用于我的数据集,将结果放在新列中,然后从该 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 和整个编码的了解非常有限,但我无法找到已经解决此类问题的任何地方。

表达式,用于仅保留与ID中的owner_id匹配的df行:

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类型,并且不可进行哈希处理,如报告所示。幸运的是,它不是必需的。

相关内容

最新更新