【问题标题】:Output missing values from one array/dataframe versus another从一个数组/数据帧与另一个输出缺失值
【发布时间】:2021-06-27 18:03:55
【问题描述】:

我不确定以下在 pandas 或 numpy 中是否更容易,所以我将把它留给答案。

我想比较两个数组/数据帧,它们都是单行字符串数据。我想输出出现在 arr2 但不出现在 arr1 中的值。例如

arr1 = np.array(['fish','bear','cat'])
arr2 = np.array(['fish','bear','dog'])

output = ['dog']

输出将是 dog,因为 dog 没有出现在 arr1 中。

【问题讨论】:

  • 您提到要输出两者中都没有出现的值。从您提供的示例中,将是狗 猫。
  • 您的意思是要输出出现在arr2 而不是arr1 中的值?
  • 是的,正确,出现在 arr2 而不是 arr1 中的值。

标签: python pandas numpy duplicates


【解决方案1】:

您所描述的是“设定差异”。 numpy 对此行为有一个恰当命名的函数setdiff1d(参见here):

import numpy as np
arr1 = np.array(['fish','bear','cat'])
arr2 = np.array(['fish','bear','dog'])

output = np.setdiff1d(arr2, arr1)

output 将包含一个 numpy 数组,其奇异值为 'dog':

array(['dog'], dtype='<U4')

要将其转换为列表,只需使用tolist 方法:

output = np.setdiff1d(arr2, arr1).tolist()

['dog']

【讨论】:

    【解决方案2】:
    import numpy as np
    

    利用np.isin()方法:

    arr2[~np.isin(arr2,arr1)]
    
    #output
    array(['dog'], dtype='<U4')
    

    如果您想要与您在问题中提到的完全相同的输出,请在上面的代码中链接 tolist() 方法:

    arr2[~np.isin(arr2,arr1)].tolist()
    
    #output
    ['dog']
    

    【讨论】:

    • 我喜欢这个答案,因为 OP 提到了一个数据框,并且相同的语法可用于 numpy 或 pandas
    • 我认为需要修改以删除熊猫的 NaN。
    • 只链dropna() 去除pandas中NaN的方法
    猜你喜欢
    • 2019-07-15
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    相关资源
    最近更新 更多