我有一个像:
value
0 1
1 2
2 2
3 3
4 4
5 4
我需要检查每个值是否唯一,并将该布尔值标记为新列。预期结果是:
value unique
0 1 True
1 2 False
2 2 False
3 3 True
4 4 False
5 4 False
我试过了:
df['unique'] = ""
df.loc[df["value"].is_unique, 'unique'] = True
但这会引发异常:
cannot use a single bool to index into setitem
任何建议将不胜感激。谢谢。
答案 0 :(得分:5)
使用 Series.duplicated
和 ~
的反转掩码:
df['unique'] = ~df['value'].duplicated(keep=False)
print (df)
value unique
0 1 True
1 2 False
2 2 False
3 3 True
4 4 False
5 4 False
或者:
df['unique'] = np.where(df['value'].duplicated(keep=False), False, True)
答案 1 :(得分:0)
这也有效:
df['unique'] = df.merge(df.value_counts().to_frame(), on='value')[0]==1