Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 将时间戳转换为新鲜度索引_Python 2.7_Timedelta - Fatal编程技术网

Python 2.7 将时间戳转换为新鲜度索引

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

我在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     
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,那么解决方法是什么?