#python #pandas #group-by #data-science #jupyter
Вопрос:
Фрейм данных -gt; простой журнал событий с 3 столбцами.
Я хотел бы сгруппировать свой фрейм данных (добавив post_fix f.ex _step_1,_step_2 и т. Д.) На основе номера #приложения. Пожалуйста, смотрите пример, прилагаемый ниже. Не могли бы вы, пожалуйста, помочь мне решить эту проблему соответственно?
data_example = {'applicationnumber': ['XYZ104183736AA', 'XYZ104183736AA', 'XDASDHGHG54G', 'XDASDHGHG54G','XDASDHGHG54G'], 'event_name': ['verification', 'verification', 'verification', 'verification','verification'],'working_time_in_seconds': [1000,2000,30000,10000,1004]} df_example = pd.DataFrame(data_example)
Комментарии:
1. не могли бы вы добавить образец данных, легко воспроизводимых, пожалуйста?
Ответ №1:
Вы можете объединить столбцы вместе, используя a groupby.cumcount()
, и рассматривать их как строки:
df['event_name'] = df['event_name'].astype(str) "_step_" df.groupby('applicationnumber').cumcount().add(1).astype(str)
С принтами:
applicationnumber event_name working_time_in_seconds 0 XYZ104AA verification_step_1 54365 1 XYZ104AA verification_step_2 35453 2 XDA54G verification_step_1 342 3 XDA54G verification_step_2 52 4 XDA54G verification_step_3 123
Я использовал этот образец DF
:
gt;gt;gt; df.to_dict() {'applicationnumber': {0: 'XYZ104AA', 1: 'XYZ104AA', 2: 'XDA54G', 3: 'XDA54G', 4: 'XDA54G'}, 'event_name': {0: 'verification', 1: 'verification', 2: 'verification', 3: 'verification', 4: 'verification'}, 'working_time_in_seconds': {0: 54365, 1: 35453, 2: 342, 3: 52, 4: 123}}
Обновленный:
import numpy as np df['event_name'] = np.where( df.event_name.str.contains('_step_'),df.event_name, df['event_name'].astype(str) "_step_" df.groupby('applicationnumber').cumcount().add(1).astype(str) )
Комментарии:
1. Знаете ли вы, как избежать «дополнительного добавления» постфикса,когда я запускаю ячейку несколько раз, например, это выглядит как проверка _ шаг_1_степ_1_степ_1 🙂 ? @sophocles
2. Простым решением было бы проверить, включен ли » шаг » уже в столбец. Смотрите обновление, пожалуйста.