Python 2.7 将时间戳转换为新鲜度索引
我在dataframe中有一列,其中包含文章及其发布日期(时间戳)。我需要使用这些信息来找出一篇文章的新鲜度分数Python 2.7 将时间戳转换为新鲜度索引,python-2.7,timedelta,Python 2.7,Timedelta,我在dataframe中有一列,其中包含文章及其发布日期(时间戳)。我需要使用这些信息来找出一篇文章的新鲜度分数 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
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
最近的文章应该得到更高的分数。时间窗口应为半小时(半小时内发表的两篇文章必须获得相同的分数)下面的一些代码可能是多余的,但似乎可以工作:
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')
解释:
(df['publicationDate']-df['publicationDate'].max()
-从最近的日期中减去所有日期
(df['score']/np.timedelta64(1,'m'))
-将timedelta转换为分钟
.apply(λx:(四舍五入(x/30)*30+30)/30如果x其他x)
-四舍五入30分钟,不包括最近的时间戳
.rank(method='max')
对结果进行排序,为所有具有相同排序的结果赋予较高的值
编辑:
要更改超过2天的级别,您可以使用以下命令:
df['diff'] = (df['publicationDate'] - df['publicationDate'].max()).apply(lambda x: x.days)
df.loc[df['diff']<=-2, 'score'] = 0
df['diff']=(df['publicationDate']-df['publicationDate'].max()).apply(λx:x.days)
df.loc[df['diff']下面的一些代码可能是多余的,但似乎可以工作:
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')
解释:
(df['publicationDate']-df['publicationDate'].max()
-从最近的日期中减去所有日期
(df['score']/np.timedelta64(1,'m'))
-将timedelta转换为分钟
.apply(λx:(四舍五入(x/30)*30+30)/30如果x其他x)
-四舍五入30分钟,不包括最近的时间戳
.rank(method='max')
对结果进行排序,为所有具有相同排序的结果赋予较高的值
编辑:
要更改超过2天的级别,您可以使用以下命令:
df['diff'] = (df['publicationDate'] - df['publicationDate'].max()).apply(lambda x: x.days)
df.loc[df['diff']<=-2, 'score'] = 0
df['diff']=(df['publicationDate']-df['publicationDate'].max()).apply(λx:x.days)
df.loc[df['diff']谢谢..但是你能告诉我(df['score']/np.timedelta64(1,'m'))
在做什么吗?当然,它会将timedelta转换为分钟。如果我只想对过去两天之间发表的文章进行排名,而其余的文章排名为0,那么解决方法是什么?谢谢..但是你能告诉我(df['score']/np.timedelta64(1,'m'))
正在执行?当然,它会将timedelta转换为分钟。如果我只想对过去两天之间发布的文章进行排名,而其余文章的排名为0,那么解决方法是什么?