熊猫每行查找唯一条目,而忽略特定数量

时间:2019-07-01 11:08:28

标签: python pandas unique

我有一个简单的数据集,已作为数据帧存储在熊猫中。我已经尝试过每行来测量唯一条目的数量,但是如果显示为-1,则忽略它。

在数据框的附加列下方 enter image description here

...

enter image description here

我正在通过添加此列

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

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

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

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

谢谢 亚历克斯

2 个答案:

答案 0 :(得分:1)

您的代码当前仅计算每行唯一条目的数量,因为您没有做任何忽略-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 :(得分:1)

您可以使用

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

忽略精确的-1值,或

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

忽略任何负值。