我有一个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]以进行唯一性计数?
答案 0 :(得分:2)
您可以将myfunc
更改为
def myfunc(row):
return row[(row < 100) & (row > -1)].nunique()
使用数据框的布尔索引。
答案 1 :(得分:1)
使用len
,set
和filter
:
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()