Bonjour, je suis stagiaire Data scientist et nouveau sur Pandas. Je rencontre actuellement quelques problèmes.

Je dois à l'aide d'un fichier Excel afficher automatiquement des Cohortes. J'ai réussi à afficher les cohortes par mois. Voici le lien du programme dont je me suis inspiré il y a aussi une petite description de ce qu'est une Cohorte : http://www.gregreda.com/2015/08/23/c...s-with-python/



J'ai en effet le Dataframe suivant :



Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
df_cohort_month = pd.DataFrame({ 'client' :id_client,
                       'charge' : charge,
                       'month_date_charge' : quarter_date_charge,
                       'active_monthly_user': active_monthly_user,
                       'user_applying_date' : user_applying_date})
 
print(df_cohort_month.head())
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
client  charge  month_date_charge  active_user
0     105          1.0               2015-07               1
1     105          0.0               2015-08               0
2     105          0.0               2015-09               0
3     105          0.0               2015-10               0
4     105          0.0               2015-11               0
j'utilise enfin le code ci dessous pour m'afficher les cohortes par mois :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
df_cohort_month['Cohort_Group_month'] = df_cohort_month.date_etat_termine.apply(lambda x: x.strftime('%Y-%m'))
cohorts = df_cohort_month.groupby(['Cohort_Group_mois', 'date_transaction_mois']).agg({
                   'charge' : np.sum,
                   'client' : pd.Series.nunique,
                   'active_monthly_user' : np.sum }`
 
def cohort_period(df_cohort_month):
       df_cohort_month['Cohort_period'] = np.arange(len(df_cohort_month)) + 1
       return df_cohort_month`
 
cohorts = cohorts.groupby(level=0).apply(cohort_period)
 
cohorts.reset_index(inplace=True)
cohorts.set_index(['Cohort_Group_month','Cohort_period'], inplace=True)
cohorts.rename(columns={'client': 'Newclients'}, inplace=True)
print(cohorts['active_monthly_user'].head(10).unstack(0))

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
Cohort_Group_mois  2015-07  2015-08  2015-09   ...     2018-04  2018-05  2018-06
Cohort_period                                  ...
 
1                      1.0      1.0      0.0   ...         1.0      1.0      1.0
2                      0.0      1.0      0.0   ...         1.0      1.0      NaN
3                      0.0      1.0      0.0   ...         1.0      NaN      NaN
4                      0.0      1.0      0.0   ...         NaN      NaN      NaN
5                      0.0      1.0      0.0   ...         NaN      NaN      NaN
6                      1.0      1.0      0.0   ...         NaN      NaN      NaN
7                      0.0      1.0      0.0   ...         NaN      NaN      NaN
8                      1.0      1.0      0.0   ...         NaN      NaN      NaN
9                      0.0      1.0      0.0   ...         NaN      NaN      NaN
10                     1.0      1.0      0.0   ...         NaN      NaN      NaN

Je souhaite maintenant obtenir mes cohortes trimestriellement ! J'arrive à créer les listes Cohort_Group_quarter et Cohort_quarter_period mais je n'arrive pas à compter les clients actifs par trimestre. ( Par définition un client actif par trimestre est un client qui a effectué au moins une transaction dans le trimestre).


j'ai donc créer un second DataFrame :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
df_cohort_quarter = pd.DataFrame({ 'client' :id_client,
                       'charge' : transaction,
                       'quarter_date_charge' : quarter_date_charge,
                       'active_monthly_user': active_monthly_user,
                       'user_applying_date' : user_applying_date,
                       })
 
df_cohort_quarter['Cohort_Group_quarter'] = df_cohort_quarter.user_applying_date.apply(lambda x: str(x.year)+'Q'+str(x.quarter))
df_cohort_quarter['Cohort_quarter_period '] = df_cohort_quarter.date_transaction_quarter.apply(lambda x: str(x.year)+'Q'+str(x.quarter))
 
print(df_cohorte_quarter.head(5)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
   client          ...           Cohort_Group_quarter
 0     105          ...                         2015Q3
 1     105          ...                         2015Q3
 2     105          ...                         2015Q3
 3     105          ...                         2015Q3
 4     105          ...                         2015Q3`
j'ai essayé de créer une nouvelle colonne nommé 'active_quarter_user' qui utilise 'active_monthly_user' pour compter les clients actifs trimestriellement.

J'ai essayé pas mal de choses avec des boucles et des conditions en parcourant la liste 'active_monthly_user' mais je ne suis arrivé à rien.




Je serais ravi d'entendre n'importe quelle informations susceptible de m'aider !
Merci beaucoup !