#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. извините, я все еще учусь форматировать вывод .