В Windows:
#include <cstdlib>
int main() {
std::system("cls");
return 0;
}
В Linux / Unix:
#include <cstdlib>
int main() {
std::system("clear");
return 0;
}
Инвертировать логическую маску с помощью ~
, созданную 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
Вы можете использовать дубликат keep = False (отрицается) для подсчета недублированных.
df = pd.DataFrame({'a': [1, 1, 2, 3], 'b': [1, 1, 2, 2]})
duplicates_s = df.duplicated(keep=False)
(~duplicates_s).sum()
Вот вариант numpy
:
import numpy as np
_, cts = np.unique(df.values, axis=0, return_counts=True)
len(np.where(cts == 1)[0])
#2
(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.
Звучит так, будто вы хотите эквивалент group by
и предложения having
.
len(df.groupby(['a','b']).filter(lambda x: len(x) == 1).index)
2