2017-09-19 1 views
1

Ich habe eine Spalte im Datenframe, die Artikel und sein Veröffentlichungsdatum (Zeitstempel) hat. Ich muss diese Informationen verwenden, um einen Frischewert eines Artikels herauszufinden.Konvertieren eines Zeitstempels in Frische-Index

articleId  publicationDate 
0  581354 2017-09-17 15:16:55 
1  581655 2017-09-18 07:37:51  
2  580864 2017-09-16 06:44:39  
3  581610 2017-09-18 06:30:30  
4  581605 2017-09-18 07:22:24  

Der neueste Artikel sollte höhere Punktzahl erhalten. Zeitfenster sollte (in einer halben Stunde veröffentlicht 2 Artikel müssen gleiche Punktzahl) eine halbe Stunde sein

Antwort

0

Einige der unten stehenden Codes überflüssig sein könnte, aber es scheint zu funktionieren:

df['score'] = df['publicationDate'] - df['publicationDate'].max() 
df['score'] = (df['score']/np.timedelta64(1, 'm')).apply(lambda x: (round(x/30) * 30 + 30)/30 if x else x).rank(method='max') 

So Sie Timedelta zu Minuten konvertieren , dann runden Sie es auf 30 und schließlich ordnen Sie diesen Wert ein. Es kann auch ein Einzeiler, wenn Sie bitte:

df['score'] = ((df['publicationDate'] - df['publicationDate'].max())/np.timedelta64(1, 'm')).apply(lambda x: (round(x/30) * 30 + 30)/30 if x else x).rank(method='max') 

Explaination:

(df['publicationDate'] - df['publicationDate'].max() - alle Termine subtrahieren jüngste

(df['score']/np.timedelta64(1, 'm')) - konvertieren Timedelta in Minuten

.apply(lambda x: (round(x/30) * 30 + 30)/30 if x else x) - Rundum 30 Minuten ohne den letzten Zeitstempel

.rank(method='max') Ordnen Sie die Ergebnisse den oberen Werten für alle diejenigen zu, die denselben Rang haben.

EDIT:

Um Rang derer älter als 2 Tage ändern Sie diese verwenden können:

df['diff'] = (df['publicationDate'] - df['publicationDate'].max()).apply(lambda x: x.days) 
df.loc[df['diff']<=-2, 'score'] = 0 

Erste Zeile Sie geben Timedelta in ganzen Tagen, und zweite auf Rang ändern 0 wobei die Tage kleiner oder gleich -2 sind.

+0

Danke .. Aber könntest du sagen was '(df ['score']/np.timedelta64 (1, 'm'))' tut? –

+0

Sicher, es konvertiert das Timedelta in Minuten. – zipa

+0

Wenn ich nur die Artikel ordnen möchte, die zwischen den letzten 2 Tagen veröffentlicht wurden, und die restlichen Artikel auf Platz 0, dann könnte das der Workaround sein? –

Verwandte Themen