Как вы можете посчитать строки, которые встречаются в DataFrame только один раз?

В Windows:

#include <cstdlib>

int main() { 
    std::system("cls");
    return 0;
}

В Linux / Unix:

#include <cstdlib>

int main() { 
    std::system("clear");
    return 0;
}
0
задан Max Ghenis 28 February 2019 в 16:12
поделиться

5 ответов

Инвертировать логическую маску с помощью ~, созданную 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
0
ответ дан jezrael 28 February 2019 в 16:12
поделиться

Вы можете использовать дубликат keep = False (отрицается) для подсчета недублированных.

df = pd.DataFrame({'a': [1, 1, 2, 3], 'b': [1, 1, 2, 2]})
duplicates_s = df.duplicated(keep=False)
(~duplicates_s).sum()
0
ответ дан ecortazar 28 February 2019 в 16:12
поделиться

Вот вариант numpy:

import numpy as np

_, cts = np.unique(df.values, axis=0, return_counts=True)
len(np.where(cts == 1)[0])
#2
0
ответ дан ALollz 28 February 2019 в 16:12
поделиться

(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.

0
ответ дан Max Ghenis 28 February 2019 в 16:12
поделиться

Звучит так, будто вы хотите эквивалент group by и предложения having.

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

2
0
ответ дан aws_apprentice 28 February 2019 в 16:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: