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.
3 Réponses :
Voici ma proposition, à partir de votre DF:
95 days 16:00:00
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])
Bienvenue @jancos
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é. p>
DateTime Code>
pour la comparaison Li>
Démarrage code> et Discuter code>
- Étape 2.2:
Obtenez tous les uniques
CID code> et itérer à chaque li>
- Étape 2.3: Vérifiez si le CID CODE> CODE> a les deux étages nous sommes intéressés par
- Étape 2.3.1: S'il ne pas attribuer 0 à ce
CID CODE> LI>
- Étape 2.3.2: sinon Calculez la différence entre
Discuter code> et Démarrage code> li>
ul> li>
- Étape 2.4: Créez notre nouveau Dataframe et renvoyez-le LI>
- Étape 2.5: Utilisation de
df.loc code>
Créez et calculez notre index moyen de jour Li>
ul> li>
ul> code strong> p> xxx pré> out fort> p> xxx pré> p>
Merci pour votre codage. C'est utile!