Присвоение класса идентификатору на основе наибольшего номераподклассов - панды - PullRequest
0 голосов
/ 23 сентября 2018

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

videoId   postId   class

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

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

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.Я попробовал несколько способов, выполнив value_counts(), max() и т. Д., Но не смог найти решение.

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

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

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

  videoId  class
0     1620      1
1     1620      2
0 голосов
/ 23 сентября 2018

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...