Подсчет уникальных значений в столбце в pandas dataframe, как в Qlik?
Если у меня есть таблица вроде этого:
df = pd.DataFrame({
'hID': [101, 102, 103, 101, 102, 104, 105, 101],
'dID': [10, 11, 12, 10, 11, 10, 12, 10],
'uID': ['James', 'Henry', 'Abe', 'James', 'Henry', 'Brian', 'Claude', 'James'],
'mID': ['A', 'B', 'A', 'B', 'A', 'A', 'A', 'C']
})
Я могу сделать count(distinct hID)
в Qlik, чтобы придумать счет 5 для уникального hID. Как это сделать в python с использованием фреймворка pandas? Или, может быть, массивный массив? Точно так же, если бы сделать count(hID)
я получу 8 в Qlik. Каков эквивалентный способ сделать это в пандах?
Ответы
Ответ 1
Считайте значения distict, используйте nunique
:
df['hID'].nunique()
5
Учитывать только ненулевые значения, использовать count
:
df['hID'].count()
8
Считать общие значения, включая нулевые значения, использовать атрибут size
:
df['hID'].size
8
Изменить для добавления условия
Использовать булевское индексирование:
df.loc[df['mID']=='A','hID'].agg(['nunique','count','size'])
ИЛИ используя query
:
df.query('mID == "A"')['hID'].agg(['nunique','count','size'])
Выход:
nunique 5
count 5
size 5
Name: hID, dtype: int64
Ответ 2
Если я предполагаю, что данные - это имя вашего фрейма данных, вы можете сделать следующее:
data['race'].value_counts()
это покажет вам отдельный элемент и их количество.
Ответ 3
Или получите количество уникальных значений для каждого столбца:
df.nunique()
dID 3
hID 5
mID 3
uID 5
dtype: int64
Новое в pandas 0.20.0
pd.DataFrame.agg
df.agg(['count', 'size', 'nunique'])
dID hID mID uID
count 8 8 8 8
size 8 8 8 8
nunique 3 5 3 5
Вы всегда были в состоянии сделать agg
внутри groupby
. Я использовал stack
в конце, потому что мне нравится презентация лучше.
df.groupby('mID').agg(['count', 'size', 'nunique']).stack()
dID hID uID
mID
A count 5 5 5
size 5 5 5
nunique 3 5 5
B count 2 2 2
size 2 2 2
nunique 2 2 2
C count 1 1 1
size 1 1 1
nunique 1 1 1
Ответ 4
Вы можете использовать nunique
в nunique
:
df.hID.nunique()
# 5
Ответ 5
Вы можете использовать уникальное свойство с помощью функции len
len (df ['hID']. unique()) 5