2017-09-19 1 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  

가장 최근 기사의 점수가 높아야합니다. 시간 창은 코드의

답변

0

일부는 아래에 중복 수 있습니다 (이 기사는 같은 점수를 받아야 반 시간에 발표) 반 시간해야하지만 작동하는 것 같다 :

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

Explaination : 당신이하십시오 또한 한 - 라이너 될 수있다 - 가장 최근

(df['score']/np.timedelta64(1, 'm'))에서 모든 날짜 빼기 -

(df['publicationDate'] - df['publicationDate'].max() 분으로 변환 timedelta를

.apply(lambda x: (round(x/30) * 30 + 30)/30 if x else x) - 가장 최근의 타임 스탬프를 제외한 30 분의 정리 작업

.rank(method='max')는 동일한 순위를 가진 모든 사람들에게 높은 값을주는 결과를 순위 화합니다.

편집 :

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

첫 번째 줄이 전체 일 timedelta 당신을 줄 것이며, 두 번째가 순위를 변경합니다 :

은 당신이 사용할 수있는 그 나이가 2 일 이내의 순위를 변경하려면 0 일이 -2보다 작거나 같습니다.

+0

고마워.하지만 당신은 무엇을'(df [ 'score']/np.timedelta64 (1, 'm'))'하고 있는지 말할 수 있습니까? –

+0

물론, 시간대를 분 단위로 변환합니다. – zipa

+0

지난 2 일 사이에 게시 된 기사와 나머지 기사의 순위를 0으로하고 싶다면 해결 방법이 될 수 있습니까? –

관련 문제