根据时间 window 在用户项目矩阵列表上创建一个累加函数
Make an accumulative function on an User Item Matrix list based on a time window
我有一个 DataFrame
将用户-项目矩阵表示为包含以下列的列表:
user_id item_id rating timestamp
因为我想做一个有时间意识的推荐系统,所以我想添加一个列,其中包含最后一个评分为 1
(例如)的项目的有序列表(因为我有时间戳)用户,所以我得到一个 DataFrame
像:
user_id item_id rating timestamp prev_items_rated_by_usr_with_1
我无法并行处理它,我需要它,因为数据集很大。
这行得通,但我不确定它是否 returns 按时间戳排序的项目并且执行时间非常长:
df['new'] = df.apply(lambda row:list(df.loc[df.user_id==row['user_id']].loc[df.timestamp<row['timestamp']].loc[df.rating==1].item_id.unique()), axis = 1)
我们可以使用 numpy shift 方法获取前几行数据。我们需要同时导入 pandas 和 numpy:
import pandas as pd
import numpy as np
我们可以设置索引,这样我们可以根据每个用户和时间戳更快地排序:
df = df.set_index(['user_id', 'timestamp'], drop=False).sort_index()
然后我们可以通过检查之前的用户是否相同以及之前的分数是否为 1 来计算新列:
df['prev_items_rated_by_usr_with_1'] = np.where(df['user_id'] == df['user_id'].shift() &
df['rating'].shift() == 1, True, False)
我有一个 DataFrame
将用户-项目矩阵表示为包含以下列的列表:
user_id item_id rating timestamp
因为我想做一个有时间意识的推荐系统,所以我想添加一个列,其中包含最后一个评分为 1
(例如)的项目的有序列表(因为我有时间戳)用户,所以我得到一个 DataFrame
像:
user_id item_id rating timestamp prev_items_rated_by_usr_with_1
我无法并行处理它,我需要它,因为数据集很大。
这行得通,但我不确定它是否 returns 按时间戳排序的项目并且执行时间非常长:
df['new'] = df.apply(lambda row:list(df.loc[df.user_id==row['user_id']].loc[df.timestamp<row['timestamp']].loc[df.rating==1].item_id.unique()), axis = 1)
我们可以使用 numpy shift 方法获取前几行数据。我们需要同时导入 pandas 和 numpy:
import pandas as pd
import numpy as np
我们可以设置索引,这样我们可以根据每个用户和时间戳更快地排序:
df = df.set_index(['user_id', 'timestamp'], drop=False).sort_index()
然后我们可以通过检查之前的用户是否相同以及之前的分数是否为 1 来计算新列:
df['prev_items_rated_by_usr_with_1'] = np.where(df['user_id'] == df['user_id'].shift() &
df['rating'].shift() == 1, True, False)