我正在建立一个食品推荐系统,我有一个数据框架:
df:
meat vegetables cheese ketchup egg...
hamburger 3 5 2 2 1
pasta 0 0 4 0 1
soup 0 2 0 0 0
...
我还有一个列表,其中包含用户不喜欢的成分:
dislike:["cheese", "egg"]
所以我要做的是创建一个函数,它添加一个新行“user_name”,在他/她不喜欢的成分中添加一个10,在所有其他列中添加一个0。输出应为:
meat vegetables cheese ketchup egg...
hamburger 3 5 2 2 1
pasta 0 0 4 0 1
soup 0 2 0 0 0
new_user 0 0 10 0 10
...
我简化了数据框架和列表,以便使其更全面,但实际上它们要长得多
这是我一直在写的:
def user_pre(df):
dislike=["cheese","egg"]
for ing in dislike:
df.loc["new_user"]= pd.Series({ing:10})
return df
我“有效”,但只适用于不喜欢列表中的最后一个元素。此外,它不会在其他单元格中添加0,而是添加Nan
提前非常感谢
我不确定这种方法有多有效,但这应该行得通
我不确定在单个数据框中将用户与菜肴混合在一起有多“健康”,但这样的功能应该可以做到:
编辑1:我也喜欢@Fred的解决方案:
编辑2:以下是Shubham的绩效评估解决方案:
就性能而言(在非常小的数据集上),列表理解速度似乎更快,但:
将new_user row=设置为零,然后过滤并等于10
将新用户创建为零
然后再次过滤并设置为10
相关问题 更多 >
编程相关推荐