使用用户定义函数中的值创建新的pandas列

时间:2017-06-07 14:07:51

标签: python pandas

我在尝试使用我创建的函数在pandas数据框架上创建新列时获取SettingWithCopyWarning,以返回该新列的值。我正在使用movielens数据集并预测电影上用户的评分。

这是我的数据框的一个例子:

enter image description here

现在,如果我想添加一个名为' prediction'将user_id和item_id发送到我的函数并返回预测我已经遵循了另一个question的建议

因此使用代码:

df['pred'] = df.apply(lambda x: predict_rating(x['user_id'], x['item_id']), axis =1)

然而,我一直在接受SettingWithCopyWarning。

:44:SettingWithCopyWarning: 尝试在DataFrame的切片副本上设置值。 尝试使用.loc [row_indexer,col_indexer] = value 请参阅文档中的警告:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

欢迎任何建议。

3 个答案:

答案 0 :(得分:0)

这样做,

df.loc [:,' pred'] = df.apply(lambda x:predict_rating(x [' user_id'],x [' item_id' ]),轴= 1)

答案 1 :(得分:0)

这个最小的例子对我有用:

import pandas as pd

df = pd.DataFrame({'user_id':[22,224], 'item_id': [377,29], 'rating': [1,3]})
def prediction_func(row):
    return row['user_id'] + row['item_id']

df['prediction'] = df.apply(prediction_func, axis=1)
print(df.head())

输出:

   item_id  rating  user_id  prediction
0      377       1       22         399
1       29       3      224         253

答案 2 :(得分:0)

我认为这毕竟与我的功能有关,所以我会深入研究并报告任何有趣的事情。