如何获取python pandas数据帧中出现的两列唯一组合的数量

时间:2018-02-18 09:25:59

标签: python pandas

我们说我在pandas中有这个数据框

     a    b
1    203  487
2    876  111
3    203  487
4    876  487

还有更多我不关心的专栏

我知道len(df.a.unique())将返回2表示a有两个唯一值,len(df.b.unique())也是如此。我想要类似于此的东西,但返回发生的AND b的唯一组合的数量。所以在这个例子中,我希望它返回3.

对于如何进行此操作的任何指导都表示赞赏

2 个答案:

答案 0 :(得分:1)

使用drop_duplicates

print (df.drop_duplicates(['a','b']))
     a    b
1  203  487
2  876  111
4  876  487

a = len(df.drop_duplicates(['a','b']).index)

duplicated具有反转条件:

a = (~df.duplicated(['a','b'])).sum()
a = len(df.index) - df.duplicated(['a','b']).sum()

或者将列转换为字符串并连接在一起,然后获取nunique

a = (df.a.astype(str) + '_' + df.b.astype(str)).nunique()
print (a)
3

答案 1 :(得分:1)

您是否将下面的案例视为两种不同的组合或一种?

1)' a'是203和' b'是487 2)' a'是487和' b'是203

如果你想把它作为两个,只需使用drop_duplicates,因为jezrael说。如果你想让它们算作一个独特的组合,我会创建一个新列,所以它总是:较小的number_the较大的数字,并在此列上执行drop_duplicates。

table table td{border-left:1px solid #ffffff;border-right:1px solid #ffffff;}
table table td table td{border:0px;}
/* the above CSS is for visual purpose only */