2017-10-17 6 views
1

Ceci est related to this question, mais maintenant je dois trouver la différence entre les dates qui sont stockées dans 'YYYY-MM-DD'. Essentiellement, la différence entre les valeurs de la colonne count est ce dont nous avons besoin, mais elle est normalisée par le nombre de jours entre chaque ligne.Différence entre les dates dans les données Pandas

Mon dataframe est:

date,site,country_code,kind,ID,rank,votes,sessions,avg_score,count 
2017-03-20,website1,US,0,84,226,0.0,15.0,3.370812,53.0 
2017-03-21,website1,US,0,84,214,0.0,15.0,3.370812,53.0 
2017-03-22,website1,US,0,84,226,0.0,16.0,3.370812,53.0 
2017-03-23,website1,US,0,84,234,0.0,16.0,3.369048,54.0 
2017-03-24,website1,US,0,84,226,0.0,16.0,3.369048,54.0 
2017-03-25,website1,US,0,84,212,0.0,16.0,3.369048,54.0 
2017-03-27,website1,US,0,84,228,0.0,16.0,3.369048,58.0 
2017-02-15,website2,AU,1,91,144,4.0,148.0,4.727272,521.0 
2017-02-16,website2,AU,1,91,144,3.0,147.0,4.727272,524.0 
2017-02-20,website2,AU,1,91,100,4.0,148.0,4.727272,531.0 
2017-02-21,website2,AU,1,91,118,6.0,149.0,4.727272,533.0 
2017-02-22,website2,AU,1,91,114,4.0,151.0,4.727272,534.0 

Je voudrais trouver la différence entre chaque date après regroupement par date+site+country+kind+ID tuples.

[date,site,country_code,kind,ID,rank,votes,sessions,avg_score,count,day_diff 
2017-03-20,website1,US,0,84,226,0.0,15.0,3.370812,0,0 
2017-03-21,website1,US,0,84,214,0.0,15.0,3.370812,0,1 
2017-03-22,website1,US,0,84,226,0.0,16.0,3.370812,0,1 
2017-03-23,website1,US,0,84,234,0.0,16.0,3.369048,0,1 
2017-03-24,website1,US,0,84,226,0.0,16.0,3.369048,0,1 
2017-03-25,website1,US,0,84,212,0.0,16.0,3.369048,0,1 
2017-03-27,website1,US,0,84,228,0.0,16.0,3.369048,4,2 
2017-02-15,website2,AU,1,91,144,4.0,148.0,4.727272,0,0 
2017-02-16,website2,AU,1,91,144,3.0,147.0,4.727272,3,1 
2017-02-20,website2,AU,1,91,100,4.0,148.0,4.727272,7,4 
2017-02-21,website2,AU,1,91,118,6.0,149.0,4.727272,3,1 
2017-02-22,website2,AU,1,91,114,4.0,151.0,4.727272,1,1] 

Une option serait de convertir la colonne date à un Pandas datetime utilisant un pd.to_datetime() et utiliser la fonction diff mais que les résultats des valeurs de « x days », de type timetelda64. Je voudrais utiliser cette différence pour trouver le nombre moyen quotidien, donc si cela peut être accompli en une seule étape moins douloureuse, cela fonctionnerait bien.

Répondre

2

vous pouvez utiliser .dt.days accesseur:

In [72]: df['date'] = pd.to_datetime(df['date']) 

In [73]: df['day_diff'] = df.groupby(['site','country_code','kind','ID'])['date'] \ 
          .diff().dt.days.fillna(0) 

In [74]: df 
Out[74]: 
     date  site country_code kind ID rank votes sessions avg_score count day_diff 
0 2017-03-20 website1   US  0 84 226 0.0  15.0 3.370812 53.0  0.0 
1 2017-03-21 website1   US  0 84 214 0.0  15.0 3.370812 53.0  1.0 
2 2017-03-22 website1   US  0 84 226 0.0  16.0 3.370812 53.0  1.0 
3 2017-03-23 website1   US  0 84 234 0.0  16.0 3.369048 54.0  1.0 
4 2017-03-24 website1   US  0 84 226 0.0  16.0 3.369048 54.0  1.0 
5 2017-03-25 website1   US  0 84 212 0.0  16.0 3.369048 54.0  1.0 
6 2017-03-27 website1   US  0 84 228 0.0  16.0 3.369048 58.0  2.0 
7 2017-02-15 website2   AU  1 91 144 4.0  148.0 4.727272 521.0  0.0 
8 2017-02-16 website2   AU  1 91 144 3.0  147.0 4.727272 524.0  1.0 
9 2017-02-20 website2   AU  1 91 100 4.0  148.0 4.727272 531.0  4.0 
10 2017-02-21 website2   AU  1 91 118 6.0  149.0 4.727272 533.0  1.0 
11 2017-02-22 website2   AU  1 91 114 4.0  151.0 4.727272 534.0  1.0