Boolean for unique value in a column
Question:
For my dataframe, e.g.
df = pd.DataFrame([1, 3, 7, 1], columns=['data'])
I want to know for each index if the value is unique in the column data
.
So the resulting dataframe should be
data is_unique
0 1 False
1 3 True
2 7 True
3 1 False
Is there a convenient approach with pandas?
Answers:
Use duplicated
with invert mask by ~
:
df['is_unique'] = ~df['data'].duplicated(keep=False)
print (df)
data is_unique
0 1 False
1 3 True
2 7 True
3 1 False
By using value_counts
+ map
df.assign(BOOL=df.data.map(df.data.value_counts()>1))
Out[437]:
data BOOL
0 1 True
1 3 False
2 7 False
3 1 True
By using drop_duplicate
df.assign(BOOL=df.index.isin(df.drop_duplicates('data',keep =False).index))
Out[440]:
data BOOL
0 1 False
1 3 True
2 7 True
3 1 False
from collections import Counter
c = Counter(df.client.to_list())
df["new_col"] = df.client.apply(lambda x:not(c[x] >1) )
One can use pandas.Series.map
and pandas.Series.value_counts
as follows
df['is_unique'] = df['data'].map(df['data'].value_counts() == 1)
[Out]:
data is_unique
0 1 False
1 3 True
2 7 True
3 1 False
For my dataframe, e.g.
df = pd.DataFrame([1, 3, 7, 1], columns=['data'])
I want to know for each index if the value is unique in the column data
.
So the resulting dataframe should be
data is_unique
0 1 False
1 3 True
2 7 True
3 1 False
Is there a convenient approach with pandas?
Use duplicated
with invert mask by ~
:
df['is_unique'] = ~df['data'].duplicated(keep=False)
print (df)
data is_unique
0 1 False
1 3 True
2 7 True
3 1 False
By using value_counts
+ map
df.assign(BOOL=df.data.map(df.data.value_counts()>1))
Out[437]:
data BOOL
0 1 True
1 3 False
2 7 False
3 1 True
By using drop_duplicate
df.assign(BOOL=df.index.isin(df.drop_duplicates('data',keep =False).index))
Out[440]:
data BOOL
0 1 False
1 3 True
2 7 True
3 1 False
from collections import Counter
c = Counter(df.client.to_list())
df["new_col"] = df.client.apply(lambda x:not(c[x] >1) )
One can use pandas.Series.map
and pandas.Series.value_counts
as follows
df['is_unique'] = df['data'].map(df['data'].value_counts() == 1)
[Out]:
data is_unique
0 1 False
1 3 True
2 7 True
3 1 False