【问题标题】:How much two columns match based on another column两列根据另一列匹配多少
【发布时间】:2022-01-16 12:11:42
【问题描述】:

如果我的数据框如下所示:

user   item   real   value  predict
  u1     i1    0.0    0.31      0.0
  u2     i1    1.0    0.50      0.0
  u1     i2    0.0    0.27      0.0
  u3     i2    0.0    0.91      0.0
  u1     i3    1.0    0.71      1.0
  u3     i3    0.0    0.80      1.0

对于每个用户,我如何确定 predictreal 的准确度?比如:

u1   1.00
u2   0.00
u3   0.50

我正在考虑按用户分组,将数据框拆分为多个用户相同的列,将这两列转换为列表,然后查看它们的匹配程度。但我有成千上万的用户。有没有更好的办法?

【问题讨论】:

  • 您能否按用户分组并对每个组执行以下操作,取 (sum{df['reral') - sum(df['predict'])/sum(df['real'] )

标签: python pandas dataframe average percentage


【解决方案1】:

这个怎么样?因为这是一个分类问题,所以会起作用。

创建另一列Diff,如果realpredict 匹配,则为True,否则为False;然后在usergroupby 并找到每个userDiff 的平均值:

out = df.assign(Diff=df['real']==df['predict']).groupby('user')['Diff'].mean()

输出:

user
u1    1.0
u2    0.0
u3    0.5
Name: Diff, dtype: float64

【讨论】:

    【解决方案2】:

    如果您使用sklearn,您可以轻松使用mean_squared_error

    from sklearn.metrics import mean_squared_error
    
    mse = df.groupby('user').apply(lambda x: mean_squared_error(x['real'], x['predict']))
    acc = 1 - mse
    print(acc)
    
    # Output:
    user
    u1    1.0
    u2    0.0
    u3    0.5
    dtype: float64
    

    注意:如果您不能或不想使用sklearn,请改用:

    mean_square_error = lambda r, p: (np.linalg.norm(r-p)**2)/len(r)
    

    【讨论】:

      猜你喜欢
      • 2020-04-11
      • 1970-01-01
      • 2016-11-22
      • 2020-10-28
      • 1970-01-01
      • 1970-01-01
      • 2019-09-27
      • 2020-05-28
      • 2017-03-04
      相关资源
      最近更新 更多