Подсчет уникальных значений в столбце в фрейме данных pandas, как в Qlik?


100

Если у меня есть такая таблица:

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? Или, может быть, массив numpy? Точно так же count(hID)я получу 8 в Qlik. Какой эквивалентный способ сделать это в пандах?


@piRSquared спасибо. Я мог бы сделать что-то вроде df [['dID', 'hID']]. Agg (['count', 'size', 'nunique']), и это сработает. Но не работает в сочетании с groupby. Итак, df [['dID', 'hID']]. Groupby ('mID'). Agg (['count', 'size', 'nunique']) сообщает KeyError. есть ли способ выбрать определенные столбцы и применить условие?
Alhpa Delta

Три пути df[['mID', 'dID','hID']].groupby('mID').agg(['count', 'size', 'nunique'])
piRSquared

Илиdf[['dID','hID']].groupby(df['mID']).agg(['count', 'size', 'nunique'])
piRSquared

1
Илиdf.groupby('mID')[['dID', 'hID']].agg(['count', 'size', 'nunique'])
piRSquared

Ответы:


180

Подсчитайте различные значения, используйте 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

Благодарность! Как добавить условие? Как nunique для mID = 'A'?
Alhpa Delta

66

Если я предполагаю, что данные - это имя вашего фрейма данных, вы можете сделать:

data['race'].value_counts()

это покажет вам отдельные элементы и их количество вхождений.


Если вам нужны пропорции для каждого уникального предмета, вы также можете сделать это. data['race'].value_counts(normalize=True)
фиктивный

24

Или получите количество уникальных значений для каждого столбца:

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

Благодарность! Как добавить условие? Как nunique для mID = 'A'?
Alhpa Delta

@AlhpaDelta Я кое-что добавил в конце. Надеюсь, что это поможет
piRSquared


0

Чтобы подсчитать уникальные значения в столбце, например, hIDкадре данных df, используйте:

len(df.hID.unique())

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.