我有一个简单的数据集,已作为数据帧存储在熊猫中。我已经尝试过每行来测量唯一条目的数量,但是如果显示为-1,则忽略它。
...
我正在通过添加此列
pdSequences['unique']=pdSequences.apply(pd.Series.nunique, axis=1)
,但是如您所见,代码并不总是能够正常工作。第一行正确返回唯一值是4(忽略最后两个-1)。
如果您看到第28行,我想取回5,但是代码返回6。
您能帮助我理解为什么我得到这两种不同类型的行为以及如何计算唯一条目(但忽略-1)吗?
谢谢 亚历克斯
答案 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)
忽略任何负值。