2017-09-19 15 views
1

記事とその公開日(タイムスタンプ)を持つデータフレームの列があります。この情報を使用して記事の新鮮度を調べる必要があります。タイムスタンプをフレッシュネスインデックスに変換する

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  

最新の記事が高いスコアを取得する必要があります。 Timewindowは、以下のコードの一部が冗長であるかもしれない

答えて

0

(半分の時間に発表された2件の記事が同じスコアを取得する必要があります)半分の時間でなければなりませんが、それは動作するようです:

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') 

ですから分にはtimedeltaを変換しますそれを30に丸め、最後にその値をランク付けします。

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') 

、について説明: - 1

(df['score']/np.timedelta64(1, 'm'))最新のすべての日付を引く - 分

.apply(lambda x: (round(x/30) * 30 + 30)/30 if x else x)にはtimedeltaを変換

(df['publicationDate'] - df['publicationDate'].max()あなたしてください場合 また、ワンライナーすることができ - 最新のタイムスタンプを除いて30分に回す

.rank(method='max')は、同じランクを持つすべての値に上限値を与える結果をランク付けします。

EDIT:最初の行は、全体の日にあなたはtimedeltaを与える、2つ目はにランクを変更します

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

あなたがこれを使用することができたものより古い2日のランクを変更するには0ここで、日数は-2以下です。

+0

ありがとうございます。しかし、あなたは何を言っていますか?(df ['score']/np.timedelta64(1、 'm')) ' –

+0

確かに、タイムディスタを分に変換します。 – zipa

+0

最後の2日間に公開された記事と残りの記事のランクを0にする場合、回避策は何ですか? –

関連する問題