Суммарное количество уникальных значений всех серий в кадре данных Pandas - PullRequest
1 голос
/ 07 марта 2019

Я нахожусь в конце моего остроумия, когда я пишу это.Вероятно, это невероятно маленькая проблема, но я не смог обойти ее.Вот что происходит:

  1. У меня есть фрейм данных df с 80 столбцами
  2. Выполнение value_counts().count() над df итеративно, я могу выведите имена столбцов и количество уникальных значений в этом столбце.

Вот проблема: я также хочу сделать sum вверх count() из уникальные значения всех столбцов.По сути, мне понадобится только один номер.S0 в основном, если column1 имел 10 уникальных значений, column2 имел 5, column3 имел 3 .., я ожидаю, что sum() будет 18.

О # 2, вот что работает (просто для цикла) -

def counting_unique_values_in_df(df):
    for evry_colm in df:
        print (evry_colm, "-", df[evry_colm].value_counts().count())

Это работает.Он печатает его в этом формате - the column - unique values

Теперь, наряду с этим, я хотел бы напечатать сумму уникальных значений.Что бы я ни пытался, он либо печатает уникальное значение последнего столбца (который случайно равен 2), либо печатает какую-то вещь случайным образом.Я знаю, что это как-то связано с циклом for, но я не могу понять, что именно.

Я также знаю, что для того, чтобы получить то, что я хочу, что по сути sum(df[evry_colm].value_counts().count()), мне понадобится

Заранее благодарен за вашу помощь.

, чтобы преобразовать df[evry_colm].value_counts().count() в серию или даже в кадр данных.

1 Ответ

3 голосов
/ 07 марта 2019

Вы можете использовать nunique , который возвращает серию по всем вашим столбцам, которую затем можно сложить:

df.nunique().sum()

Моим первым инстинктом было сделать это сериями с пониманием списка

sum([df[col].nunique() for col in list(df)])

но это медленнее и менее мучительно!

...