如何获取特定列值的所有唯一组合

21

我想提取Col1Col2Col3列的所有唯一值的组合。假设有以下数据框df

df =

Col1    Col2    Col3
12      AB      13
11      AB      13
12      AB      13
12      AC      14

答案是:

unique =

Col1    Col2    Col3
12      AB      13
11      AB      13
12      AC      14

我知道如何获得特定列的唯一值,即df.Col1.unique(),但对于唯一组合不确定。


1
这个回答解决了你的问题吗?从数据框中找到唯一列的组合 - toliveira
2个回答

28

有一个方法可以实现这个功能 - pandas.DataFrame.drop_duplicates:

>>> df.drop_duplicates()
   Col1 Col2  Col3
0    12   AB    13
1    11   AB    13
3    12   AC    14

你也可以原地操作来实现:

>>> df.drop_duplicates(inplace=True)
>>> df
   Col1 Col2  Col3
0    12   AB    13
1    11   AB    13
3    12   AC    14

如果您需要获取某些列的唯一值:

>>> df[['Col2','Col3']].drop_duplicates()
  Col2  Col3
0   AB    13
3   AC    14

如@jezrael所建议的,您也可以考虑使用drop_duplicates()subset参数:

>>> df.drop_duplicates(subset=['Col2','Col3'])
   Col1 Col2  Col3
0    12   AB    13
3    12   AC    14

如果我有更多的列怎么办?我只需要获取三列的唯一值。应该像这样吗?:df[["Col1","Col2","Col3"]].drop_duplicates() - Dinosaurius
1
@RomanPekar - 我认为OP想要 print (df.drop_duplicates(subset=['Col1','Col2','Col3'])) - jezrael
@jezrael 我认为他需要获取某些列的唯一值,但我会将您的建议添加到答案中,谢谢。 - Roman Pekar
@RomanPekar - 是的,但如果有多个列,只需要按3个列进行过滤,则需要子集。但这取决于OP确切的需求。 - jezrael

0

你也可以在索引上使用unique()方法:

index = ['Col2','Col3']
df.set_index(index).index.unique().to_frame(False)

你可能会对使用value_count来计算每个组合重复出现的次数感兴趣,具体解释可以参考这个答案

df[index].value_counts()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接