Присвоение класса идентификатору на основе наибольшего номера подклассов - панды

1

Так что на самом деле у меня есть videoID с некоторым videoID в котором есть цепочка видео с подкатегориями, и я хочу назначить самый высокий класс. Таким образом, мой dataframe выглядит так,

videoId   postId   class

12234     788         1
12234     789         1
12234     790         3
12234     791         4
12234     792         1
12234     793         4

Поэтому я хочу, чтобы такой кадр данных для каждого такого видео:

videoId   class
  12234      1

Так как наивысший класс - 1 (подсчет его подпоследовательных классов) под этим videoId

Теперь предположим, что если у меня есть связь между классами, скажите так:

videoId   postId   class

1620      34          1
1620      35          1
1620      36          2
1620      37          2

Я хочу, чтобы это было так:

 videoId  class
 1620      1
 1620      2

Поэтому, когда есть связь между подклассами, я хочу, чтобы все они отображались для этого videoId. Я пробовал несколько wys, делая value_counts(), max() и т.д., Но не смог дотянуться до решения.

Теги:
pandas

2 ответа

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

Вы можете просто применить mode по групповому и сбросному индексу, т.е.

df.groupby('videoId')['class'].apply(pd.Series.mode).reset_index(level=0)

  videoId  class
0     1620      1
1     1620      2
  • 0
    совсем забыл про функцию mode, работает как брелок. Спасибо
1

Один из способов сделать это - использовать плотное ранжирование:

df.groupby('videoId')['class'].value_counts()\
  .rank(method='dense',ascending=False)\
  .rename('ranking')\
  .reset_index()\
  .query('ranking == 1')

Выход:

   videoId  class  ranking
0     1620      1      1.0
1     1620      2      1.0

Ещё вопросы

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