Определение наиболее часто встречающегося значения (строки) в столбце - PullRequest
0 голосов
/ 22 февраля 2019

У меня очень большой набор данных (10 ГБ) в формате csv с различными столбцами и строками.Один из столбцов - это идентификаторы (представленные в виде строк) некоторого класса лиц.Все идентификаторы скремблированы в данных, и каждый отдельный идентификатор может встречаться более одного раза.Я хотел бы найти идентификатор человека, который чаще всего встречается в данных.В идеале мне бы хотелось подсчитать, сколько раз каждый ID встречается в наборе данных.В конце концов я также хотел бы провести статистический анализ отдельных идентификаторов.Какой самый быстрый способ сделать это.Я попробовал сгруппировать, но не знаю, как найти идентификатор, соответствующий группам, и их размер.

import pandas as pd
df = pd.read_csv('file')
user_groups = df.groupby(['IDs'])

Ответы [ 4 ]

0 голосов
/ 22 февраля 2019

Здесь ответили Наиболее частое значение , если вы просто хотите найти режим

Если вы хотите разбить группу по группам, попробуйте следующее:

df_2= df.groupby('Ids').count().reset_index()
df_2 = df_2.sort_values('replicate',ascending = False)

Вы можете добавить переименование одного из столбцов в частоту:

df_2 = df_2.rename(columns = {'Column Name':'new name'})
0 голосов
/ 22 февраля 2019

Я не уверен, что это именно тот ответ, который вы искали, но если бы это был я, я бы хотел составить словарь кортежей из идентификаторов, например: {'ID Number': 'Count', '1234ABC ': 0, ...]

Тогда я бы использовал readlines (), чтобы прочитать каждую строку большого набора данных, и если какой-либо из идентификаторов появится в этой строке данных, обновите счетчик в спискекортежи.

Как только он завершит чтение всех строк набора данных, найдите максимальное значение для 'Count' и верните связанный с ним идентификационный номер.

Вы даже можете выполнить сортировку в спискесортировать их по большинству вхождений идентификационного номера в наименьшее количество.

0 голосов
/ 22 февраля 2019

Вы можете использовать value_counts для панд.

value_counts : Возвращает объект, содержащий количество уникальных значений.Полученный объект будет в порядке убывания, так что первый элемент является наиболее часто встречающимся элементом.По умолчанию исключаются значения NA.

df.ID.value_counts()

Можно использовать группу тоже, как вы сказали по вопросу, , и это лучше , когда вы пытаетесь сделатьпростой подсчет частоты:

df.groupby(['ID'], sort=True).size()

Можно увидеть вычислительную стоимость каждого подхода и объяснить, почему один метод натощак, чем другой, на этом ответе .Но TLDR ответа:

m       grouper   counter
10      62.9 ms    315 ms
10**3    191 ms    535 ms
10**7    514 ms    459 ms

Это видео показывает, как некоторые операции выполняются внутри панд, поэтому, если вы хотите понять, какой метод использует больше памятиили требует больше операций, это полезно.

0 голосов
/ 22 февраля 2019
import pandas as pd
df = pd.read_csv('file')
user_groups = df.groupby('IDs', as_index=False).count()
user_groups.sort_values([yourcountedcolumn], ascending=True/False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...