Сгруппируйте по фрейму данных и разделите на столбцы

#python #pandas

Вопрос:

Ниже приведен вывод фрейма данных, который я могу опубликовать

 df2 = df.groupby(['id1','id2']).size().reset_index()
df2.columns = ['id1','id2','Count']
print (df2)
 
   id1                         id2                  Count
   7780379  00000000-0000-0000-0000-000000000000      1
   7780379  72b9f501-6d48-4a37-8f3a-ff4e5fb6ec8d     19 

я пытаюсь добавить условие , что любой идентификатор 2, принадлежащий 00000000-0000-0000-0000-000000000000, является недопустимым числом, ниже приведен ожидаемый результат

      id1    ValidCount  InvalidCount
     7780379      19         1
 

Пожалуйста, поделитесь, если есть какие-либо указания.

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

1. может быть, использовать замену? pandas.pydata.org/docs/reference/api/…

Ответ №1:

Воспользуйся groupby_sum :

 out = df.groupby(['id1', df['id2']!='00000000-0000-0000-0000-000000000000'])['Count'] 
        .sum().unstack().rename(columns={True: 'ValidCount', False: 'InvalidCount'})
 

Выход:

 >>> out
id2      InvalidCount  ValidCount
id1                              
7780379             1          19
 

Ответ №2:

Вы можете получить конечный результат df напрямую, без необходимости df2 :

 valids = np.where(df['id2']=='00000000-0000-0000-0000-000000000000', 
                  'InvalidCount', 'ValidCount')
df.groupby(['id1', valids]).size().unstack('id2').reset_index()
 

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

1. Хонг , ниже приведен вывод , но ищем вывод, как указано выше id1 level_1 0 7780379 Недействительный счет 1 7780379 Действительный счет 19

2. извините, я все еще учусь форматировать вывод .