我希望根据某个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 既是字母又是数字,所以是字符串(的格式不正确。
我有两个问题:
- 我提出的方法是最好的方法吗?
- 如何修复我看到的错误?
如果这是非常明显的事情,我很抱歉,我对 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
类型,并且不可进行哈希处理,如报告所示。幸运的是,它不是必需的。