#python #python-3.x #pandas #dataframe #pandas-groupby
#python #python-3.x #pandas #dataframe #pandas-groupby
Вопрос:
Q1. Учитывая фрейм данных 1, я пытаюсь получить групповые уникальные новые появления и другой столбец, который дает мне существующее количество идентификаторов в месяц
ID Date
1 Jan-2020
2 Feb-2020
3 Feb-2020
1 Mar-2020
2 Mar-2020
3 Mar-2020
4 Apr-2020
5 Apr-2020
Ожидаемый результат для уникальных вновь добавленных значений идентификатора группы по и для существующей суммы значений идентификатора
Date ID_Count Existing_count
Jan-2020 1 0
Feb-2020 2 1
Mar-2020 0 3
Apr-2020 2 3
Примечание: ID_Count за март 2020 равен НУЛЮ, поскольку идентификаторы 1, 2 и 3 присутствовали в предыдущие месяцы.
Примечание: Существующее количество равно 0 для января 2020 года, потому что до января было ноль идентификаторов. Существующее количество для февраля-2020 равно 1, потому что до февраля было только 1. В марте-2020 есть 3 существующих количества, поскольку оно добавляет январь февраль и так далее
Ответ №1:
Я думаю, вы можете сделать это следующим образом:
df['month'] = pd.to_datetime(df['Date'], format='%b-%Y')
# Find new IDs
df['new'] = df.groupby('ID').cumcount()==0
# Count new IDs by month
df_ct = df.groupby('month')['new'].sum().to_frame(name='ID_Count')
# Count all previous new IDs
df_ct['Existing_cnt'] = df_ct['ID_Count'].shift().cumsum().fillna(0).astype(int)
df_ct.index = df_ct.index.strftime('%b-%Y')
df_ct
Вывод:
ID_Count Existing_cnt
month
Jan-2020 1 0
Feb-2020 2 1
Mar-2020 0 3
Apr-2020 2 3
Комментарии:
1. Сработало как по волшебству. Я получил существующее количество, но застрял из-за первого шага. Спасибо за помощь!