【问题标题】:Pandas find unique entries per row, ignoring a specific number熊猫每行查找唯一条目,忽略特定数字
【发布时间】:2019-07-01 11:08:28
【问题描述】:

我有一个简单的数据集,已作为数据框存储在 pandas 中。我尝试每行测量唯一条目的数量,如果出现则忽略 -1 数字。

在数据框的附加列下方

...

我正在添加此列

pdSequences['unique']=pdSequences.apply(pd.Series.nunique, axis=1)

但正如您所见,代码并非总是能正常工作。第一行正确返回唯一值是四(忽略最后两个 -1)。

如果您看到第 28 行,我想返回 5,但代码返回 6。

您能帮我理解为什么会出现这两种不同类型的行为以及如何计算唯一条目(但忽略 -1)吗?

谢谢 亚历克斯

【问题讨论】:

  • 请提供文本格式的数据,而不是图片。我们不想手动输入您的所有数据。谢谢 !能否提供预期的输出?
  • 行为正确,第一行有4个唯一数字(58、68、59、-1)
  • 如果要忽略-1,则第1行的唯一值数量为3:58, 68, 59。如果您提供一些示例数据(不在图片中),我们可以重现答案

标签: python pandas unique


【解决方案1】:

你可以使用

a[a!=-1].nunique(axis=1)

忽略确切的-1 值,或

a[a>-1].nunique(axis=1)

忽略任何负值。

【讨论】:

    【解决方案2】:

    您的代码目前只是计算每行唯一条目的数量,因为您没有做任何事情来忽略 -1。您可以这样做:

    a = pd.DataFrame({'0':[58, 59, 60],
                     '1':[58, 60, -1],
                     '2':[-1, 61, -1]})
    def myfunc(row):
        if -1 in row.values:
            return row.nunique() - 1
        else:
            return row.nunique()
    
    a['unique'] = a.apply(myfunc, axis=1)
    a
    
         0   1   2  unique
    0   58  58  -1  1
    1   59  60  61  3
    2   60  -1  -1  1
    

    【讨论】:

    • 这不适用于每行任意数量的-1
    • 是的。你认为这在什么输入上不起作用?我的测试数据框每行有 0、1 和 2 个 -1 并且每次都有效。
    • 每行尝试三个或更多-1
    • 对不起,我很困惑......是的,它确实可以正常工作。 :-)
    猜你喜欢
    • 1970-01-01
    • 2023-02-25
    • 2021-08-05
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 2020-10-01
    • 2019-08-30
    • 1970-01-01
    相关资源
    最近更新 更多