0
votes

Comment calculer le nombre de jours entre les étapes de ce df Python Pandas?

df = pd.DataFrame({'Campaign ID':[48464,48464,48464,48464,26380,26380,22676,39529,39529,46029,46029,46029,17030,46724,46724,39379,39379,39379],
'Campaign stage':["Lost","Developing","Discussing","Starting","Discussing", "Starting","Developing",    "Discussing","Starting","Developing",   "Discussing","Starting","Developing",   "Developing","Discussing","Lost",   "Developing","Discussing"],
'Stage Number':[-1, 3,  2,  1,  2,  1,  3,  2,  1,  3,  2,  1,  3,  3,  2,  -1, 3,  2],
'Campaign Date':["2/8/2019","1/9/2019","1/3/2019","3/3/2018","2/14/2019","12/5/2018","7/25/2018","6/8/2018","3/4/2018","12/8/2018","9/9/2018","5/31/2018","6/7/2018","3/27/2018","1/6/2018","2/15/2019","12/15/2018","9/4/2018"]})

pvt = pd.pivot_table(df,values=['Campaign stage'],index=['Campaign ID','Campaign stage','Stage Number','Campaign Date'],aggfunc='count')
pvt.sort_values(['Campaign ID','Campaign Date'],ascending=[True,False])
Hi guys, I have the above dataframe and I'd like to calculate the number of days between campaign stage "starting" and "discussing" for each campaign and then calculate the average.Because of the data quality, the campaign stages are not consistent. So, for campaigns don't have the two stages "starting" and "discussing", I want to set as 0.I created a pivot table view of the data and sorted the campaign date descending order...But I don't know how to do next.Thanks in advance for the help. 

0 commentaires

3 Réponses :


0
votes

Voici ma proposition, à partir de votre DF:

95 days 16:00:00


0 commentaires

0
votes
df['Campaign Date'] =  pd.to_datetime(df['Campaign Date'],format='%m/%d/%Y')
compare= {}
for ids,gp in df.groupby('Campaign ID'):
    try:
        compare[ids]= gp.loc[gp['Campaign stage']=='Discussing']['Campaign Date'].iloc[0] - gp.loc[gp['Campaign stage']=='Starting']['Campaign Date'].iloc[0]
    except:
        compare[ids] =0

df['new_col'] = df['Campaign ID'].apply(lambda x:compare[x])

1 commentaires

Bienvenue @jancos



0
votes

Je suis incertain dans quelle forme vous souhaitez que votre résultat final soit, l'échantillon ci-dessous suppose que vous le souhaitez dans un nouveau Dataframe.

Nous pouvons aller à plusieurs itinéraires, cependant, j'ai choisi de créer une fonction ci-dessous et de vous décomposer chaque étape de clarté.

  • Étape 1: Mettez à jour votre type de données de date à DateTime pour la comparaison
  • Étape 2: Appelez la fonction Étape 2.1: Définissez la liste vide pour stocker nos valeurs et jours de comptage entre Démarrage et Discuter
    • Étape 2.2: Obtenez tous les uniques CID et itérer à chaque
    • Étape 2.3: Vérifiez si le CID a les deux étages nous sommes intéressés par
      • Étape 2.3.1: S'il ne pas attribuer 0 à ce CID
      • Étape 2.3.2: sinon Calculez la différence entre Discuter et Démarrage
      • Étape 2.4: Créez notre nouveau Dataframe et renvoyez-le
      • Étape 2.5: Utilisation de df.loc Créez et calculez notre index moyen de jour

        code xxx

        out xxx


1 commentaires

Merci pour votre codage. C'est utile!