Так что на самом деле у меня есть 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()
и т.д., Но не смог дотянуться до решения.
Вы можете просто применить mode
по групповому и сбросному индексу, т.е.
df.groupby('videoId')['class'].apply(pd.Series.mode).reset_index(level=0)
videoId class
0 1620 1
1 1620 2
Один из способов сделать это - использовать плотное ранжирование:
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