我想计算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。
答案 0 :(得分:9)
将duplicated
和~
创建的sum
转换为True
的值的布尔掩码(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 :(得分: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的行。
答案 2 :(得分:1)
这是一个numpy
选项:
import numpy as np
_, cts = np.unique(df.values, axis=0, return_counts=True)
len(np.where(cts == 1)[0])
#2
答案 3 :(得分:0)
听起来像group by
和having
子句的声音。
len(df.groupby(['a','b']).filter(lambda x: len(x) == 1).index)
2
答案 4 :(得分: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()