Панды проверяют, существует ли значение, используя несколько условий внутри группы, и подсчитывают значение, если оно истинно

#python #pandas #group-by #transform

#python #pandas #группировка по #преобразование

Вопрос:

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

У меня есть

 group = df.groupby('id')
df.loc[:,'Match'] = (group['flag'].transform(lambda x: x.eq(0).any()))amp;(group['flag'].transform(lambda x: x.eq(1).any()))
  

Что дает мне значения True и False. Как я могу затем подсчитать количество истинных значений, которые заполняются для каждого идентификатора?

Пример данных:

 id   flag   Match  Count Match
123  0      True    3
123  1      True    3
123  1      True    3
567  0      False   0
567  0      False   0
  

Столбец соответствия создан выше, затем я хотел бы создать столбец соответствия Count.

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

1. Вы должны предоставить некоторые образцы данных.

2. Я добавил несколько примеров данных @QuangHoang

3. Для идентификатора 123 есть 3 истины, однако в вашем столбце count match есть только 2 для идентификатора 123. Есть ли причина для этого? или это опечатка?

4. Это опечатка, я ее исправил @CameronRiddell

Ответ №1:

Это:

 df['Count Match'] = df['Match'].astype(int).groupby(df['id']).transform('sum')
  

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

1. В вашем назначении столбца отсутствует закрывающая скобка. Пытался отредактировать его для вас, но это всего лишь изменение на 1 символ. df['Count Match']