#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. Рад, что вы это поняли. Счастливого кодирования. Будьте в безопасности и оставайтесь здоровыми.