如何计算在DataFrame中只出现一次的行?

问题描述 投票:0回答:5

我想计算DataFrame中只出现一次的行数。例如,在下面的示例中,我返回2,因为只有行索引2和3出现一次:

In [1]: df = pd.DataFrame({'a': [1, 1, 2, 3], 'b': [1, 1, 2, 2]})                                                                                                                                                                                                                                                               

In [2]: df                                                                                                                                                                                                                                                                                
Out[2]: 
   a  b
0  1  1
1  1  1
2  2  2
3  3  2

(这与询问唯一行的数量不同,在这种情况下,每个df.drop_duplicates().shape[0]的行数为3。

python pandas
5个回答
9
投票

~duplicated创建的sum反转布尔掩码计算Trues值(True是像1这样的过程):

out = (~df.duplicated(keep=False)).sum()
print (out)
2 

细节:

print (df.duplicated(keep=False))
0     True
1     True
2    False
3    False

print (~df.duplicated(keep=False))
0    False
1    False
2     True
3     True
dtype: bool

1
投票

(df.groupby(df.columns.tolist()).size() == 1).sum()

在幕后,这是:

In [33]: df.groupby(df.columns.tolist()).size()                                                                                                                                                                                                                                            
Out[33]: 
a  b
1  1    2
2  2    1
3  2    1
dtype: int64

size计算每个组合的行数,然后将其与1的行相加。


1
投票

这是一个numpy选项:

import numpy as np

_, cts = np.unique(df.values, axis=0, return_counts=True)
len(np.where(cts == 1)[0])
#2

0
投票

听起来你想要相当于group byhaving条款。

len(df.groupby(['a','b']).filter(lambda x: len(x) == 1).index)

2

0
投票

您可以使用重复的keep = False(否定)来计算非重复数。

df = pd.DataFrame({'a': [1, 1, 2, 3], 'b': [1, 1, 2, 2]})
duplicates_s = df.duplicated(keep=False)
(~duplicates_s).sum()
© www.soinside.com 2019 - 2024. All rights reserved.