python,通过忽略特定值的行来测量唯一元素

时间:2019-07-15 08:38:05

标签: python unique counting

我有一个6列的数据框,其中每个条目都有一个数字序列。

pd.DataFrame(FixByteOrderUnique)
Out[518]: 
         0   1   2    3    4  5
0       58  68  58   59   -1 -1
1       59  69  59   58   -1 -1
2       93  94  93   33   -1 -1
3       58  59  58   68   -1 -1
4       92  94  92   33   -1 -1
5       59  58  59   69   -1 -1
6       57  48  57   79   -1 -1
7       15  26  15  101   -1 -1

我希望每行测量唯一元素的数量,而忽略计数中的数字:-1,100,101和102。有效数字来自[0,99]。

我所做的是制作一个在计算-1时会忽略的lambda函数

def myfunc(row):
    if -1 in row.values:
        return row.nunique() - 1
    else:
        return row.nunique()

然后像这样调用我的函数

pd_sequences['unique'] = pd.DataFrame(FixByteOrderUnique).apply(myfunc, axis=1)

我如何在我的lambda函数中包含一个数字,以检查该数字是否来自[0,99]以进行唯一性计数?

3 个答案:

答案 0 :(得分:2)

您可以将myfunc更改为

def myfunc(row):
    return row[(row < 100) & (row > -1)].nunique()

使用数据框的布尔索引。

答案 1 :(得分:1)

使用lensetfilter

df['nuniq'] = df.apply(lambda a: len(set(filter(lambda x:x in range(100), a))), 1)
print(df)

输出:

    0   1   2    3  4  5  nuniq
0  58  68  58   59 -1 -1      3
1  59  69  59   58 -1 -1      3
2  93  94  93   33 -1 -1      3
3  58  59  58   68 -1 -1      3
4  92  94  92   33 -1 -1      3
5  59  58  59   69 -1 -1      3
6  57  48  57   79 -1 -1      3
7  15  26  15  101 -1 -1      2

答案 2 :(得分:0)

将功能更改为:

void associate()