Подсчитывать дубликаты в определенном столбце

#python #pandas

#python #панды

Вопрос:

мой фрейм данных выглядит следующим образом

 ID      Stage      Recipe
1       ABC        X
1       ABC        D
1       ABC        D
1       ABC        D
2       ABC        X
2       ABC        X     
1       BCD        Y
1       CDE        Y
  

Я хочу подсчитать рецепты, которые встречаются более одного раза на определенном этапе (что равно переделке) для определенного идентификатора.

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

 ID     Rework_steps
1      2
2      1
  

С удовольствием оценю любую помощь!

Комментарии:

1. Посмотрите groupby и nunique

Ответ №1:

Попробуйте использовать то, что предлагает @RubenHelslott таким образом:

 (df.groupby(['ID', 'Recipe'])['Stage'].nunique() == 1).sum(level=0)
  

Вывод:

 ID
1    2
2    1
Name: Stage, dtype: int64
  

Подробные сведения:

Подсчитайте количество уникальных этапов в каждом идентификаторе и рецепте, используя groupby и nunique , затем посмотрите, равно ли это число 1, которое возвращает многоиндексный логический ряд. Теперь мы можем использовать sum параметр with level=0 для суммирования значений с «идентификатором» самого внешнего уровня индекса.

Комментарии:

1. хорошо, спасибо! Я бы интуитивно использовал: (fab2.groupby([‘lotid’, ‘stage’])[‘recpid’].nunique() == 1).sum(level = 0), что дает мне другой результат. Поскольку у меня может быть один и тот же рецепт на разных этапах, это было бы более уместно?

2. Вы группируете по идентификатору и этапу, чтобы подсчитать количество повторных идентификаторов для каждого идентификатора и этапов, в отличие от groupby по идентификатору и рецепту для подсчета количества этапов для каждого идентификатора и рецепта.

3. Я понимаю, что он делает, но я не думаю, что это то решение, которое я искал. Я хочу подсчитывать не уникальные рецепты на каждом этапе, а дубликаты. Я не понимаю, как этот код может это сделать.

Ответ №2:

Теперь я действительно решил эту проблему сам, просто подсчитав дубликаты duplicates=`df[df.duplicated(subset=['ID','Stage','Recipe'])] и duplicates.groupby('ID').size()

Комментарии:

1. Рад, что вы это поняли. Счастливого кодирования. Будьте в безопасности и оставайтесь здоровыми.