Бин дата в месяц - PullRequest
       3

Бин дата в месяц

1 голос
/ 09 февраля 2020

Теперь у меня есть таблица:

Score  Customer ID      my_dates        Threshold Model_name   is_alert
50         8           2017-08-05         50     Mod1          yes
50         9           2017-12-05         50     Mod1          yes
50         28          2017-05-22         50     Mod2          yes
50         28          2017-05-26         50     Mod2          yes
50         36          2017-06-20         50     Mod2          yes

Если оценка равна или превышает порог, is_alert покажет «да»

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

Model_name   Jan-17    Feb-17    Mar-17    APR-17   May-17   Jun-17 
Mod1                                                           
Mod2                                                           

Может ли кто-нибудь помочь мне с этим ? Спасибо

1 Ответ

1 голос
/ 09 февраля 2020

Используйте crosstab с преобразованием дат в месячные периоды на Series.dt.to_period, последнее преобразование в названия месяцев на PeriodIndex.strftime, но перед получением разница по группам на DataFrameGroupBy.diff и фильтрация строк с отсутствующими значениями (первые строки по группам) и меньшими или равными, например 7 на Series.ge и boolean indexing :

df['my_dates'] = pd.to_datetime(df['my_dates'])

m = df['my_dates'].dt.to_period('m')
df['diff'] = df.groupby(['Model_name'])['my_dates'].diff().dt.days
print (df)
   Score  Customer ID   my_dates  Threshold Model_name is_alert   diff
0     50            8 2017-08-05         50       Mod1      yes    NaN
1     50            9 2017-12-05         50       Mod1      yes  122.0
2     50           28 2017-05-22         50       Mod2      yes    NaN
3     50           28 2017-05-26         50       Mod2      yes    4.0
4     50           36 2017-06-20         50       Mod2      yes   25.0

df = df[df['diff'].ge(7) | df['diff'].isna()]
df1 = pd.crosstab(df['Model_name'], m)
df1.columns = df1.columns.strftime('%b-%y')
print (df1)
my_dates    May-17  Jun-17  Aug-17  Dec-17
Model_name                                
Mod1             0       0       1       1
Mod2             1       1       0       0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...