Фрейм данных Python для панд с повторяющимися значениями

1

Я хочу индексировать следующий фрейм данных pandas со следующими значениями образца. В DataFrame много дубликатов.

ID      AccountName
83      CHRISTIAN UNIVERSITY
83      CHRISTIAN UNIVERSITY
83      CHRISTIAN UNIVERSITY
83      CHRISTIAN UNIVERSITY
104     UNIVERSITY
104     UNIVERSITY
1740    ELECTRIC CORPORATIO
1740    ELECTRIC CORPORATIO
1740    ELECTRIC CORPORATIO
1740    ELECTRIC CORPORATIO
...

Результирующий фрейм должен быть следующим.

  ID        index   AccountName
  83            1   CHRISTIAN UNIVERSITY
  83            1   CHRISTIAN UNIVERSITY
  83            1   CHRISTIAN UNIVERSITY
  83            1   CHRISTIAN UNIVERSITY
 104            2   UNIVERSITY
 104            2   UNIVERSITY
1740            3   ELECTRIC CORPORATIO
1740            3   ELECTRIC CORPORATIO
1740            3   ELECTRIC CORPORATIO
1740            3   ELECTRIC CORPORATIO
...

У кого-нибудь есть быстрый и эффективный способ сделать это?

Теги:
pandas
dataframe

1 ответ

4
Лучший ответ

Предполагая, что вы хотите увеличивать индекс для каждого нового идентификатора, я бы сделал:

In [43]: df["number"] = df.ID.rank(method='dense').astype(int)

In [44]: df
Out[44]: 
     ID           AccountName  number
0    83  CHRISTIAN UNIVERSITY       1
1    83  CHRISTIAN UNIVERSITY       1
2    83  CHRISTIAN UNIVERSITY       1
3    83  CHRISTIAN UNIVERSITY       1
4   104            UNIVERSITY       2
5   104            UNIVERSITY       2
6  1740   ELECTRIC CORPORATIO       3
7  1740   ELECTRIC CORPORATIO       3
8  1740   ELECTRIC CORPORATIO       3
9  1740   ELECTRIC CORPORATIO       3

который даст самый низкий идентификатор номер 1, а второй самый низкий 2 и т.д., независимо от порядка, который они фактически появляются в кадре (например, если вы поместите ELECTRIC_CORPORATIO во второй раз, он все равно получит № 3, потому что 1740 является третьим номером.)

Существуют и другие способы, если вы можете быть уверены, что ваши кластеры смежны, например

(~df["ID"].duplicated()).cumsum()

но гораздо менее надежный, чем сопоставление уникального идентификатора с уникальным номером, ИМХО.

Кроме того, я использовал "число" здесь как имя столбца, а не "индекс", потому что это вызывает путаницу между индексом кадра и вашим столбцом с именем "index".

  • 0
    Отлично, спасибо DSM

Ещё вопросы

Сообщество Overcoder
Наверх
Меню