Более быстрый способ добавить упорядоченные частоты серий панд - PullRequest
0 голосов
/ 19 мая 2018

Я пытаюсь составить список количества элементов в каждой группе в серии панд.В моем dataframe у меня есть столбец с именем ID, и все значения встречаются несколько раз.Я хочу сделать список, содержащий частоту каждого элемента в порядке, в котором они встречаются.

Таким образом, пример идентификатора столбца: [1,2,3,3,3,2,1,5,2,3,1,2,4,3]

, это должно привести к [3,4,5,1,1], так какидентификатор группы 1 встречается 3 раза, идентификатор группы 2 встречается 4 раза и т. д. Я создал код, который отлично справляется с этой задачей:

group_list = df.ID.unique().tolist()
group_size = []

for i in group_list:
    group_size.append(df.ID.value_counts()[i])

Проблема заключается в том, что для завершения требуется длинный путь.У меня 5 миллионов строк, и я позволил ему работать в течение 50 минут, а он все еще не закончился!Я попытался запустить его для первых 30-50 строк, и он работает как задумано.

Для меня было бы логично просто использовать value_counts(sort=False), но это не дает мне частоты идентификатора группы в порядкеони встречаются в моей серии.Я также пытался реализовать расширение, потому что я читал, что это должно быть быстрее, но я получаю "numpy.int64 object is not iterable".

1 Ответ

0 голосов
/ 19 мая 2018

Для данной серии

ser = pd.Series([1,2,3,3,3,2,1,5,2,3,1,2,4,3])

Вы можете сделать следующее:

ser.value_counts().reindex(ser.unique()).tolist()
Out: [3, 4, 5, 1, 1]

Reindex переупорядочит элементы value_counts в соответствии с порядком их появления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...