【问题标题】:Filtering a dataset on values not in another dataset根据不在另一个数据集中的值过滤数据集
【发布时间】:2019-01-17 06:17:51
【问题描述】:

我希望根据某个 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 和整个编码的了解非常有限,但我无法找到已经解决此类问题的任何地方。

【问题讨论】:

标签: python pandas function filter formatting


【解决方案1】:

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

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

Lambda 表达式会比 this 慢很多。

isin 是 Pandas 的方式。 not in 是 Python 的集合方式。

您收到此错误的原因是df['owner_id'] not in ID['owner_id'] 对左侧进行哈希运算以确定它是否存在于右侧。 df['owner_id']Series 类型,并且是不可散列的,据报道。幸运的是,它不需要。

【讨论】:

    猜你喜欢
    • 2019-06-12
    • 2019-07-08
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 2023-03-07
    • 1970-01-01
    相关资源
    最近更新 更多