我希望根据某个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既是字母又是数字,因此是字符串)的格式不正确。
我有两个问题:
我很抱歉,如果这很明显,我对Python和整个编码的接触非常有限,但是我找不到任何地方已经解决了此类问题。
答案 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
,不可散列。幸运的是,它不是必需的。