繁体   English   中英

没有顺序的两列中唯一相同值的百分比 pandas

[英]Percentage of unique same values in two columns without order pandas

我有一个 dataframe

agent_id ts pred gt
0      0  0    0
0      1  0    0
0      2  0    1
0      3  1    0
1      0  0    0
1      1  1    0
1      2  2    1
1      3  3    0

agent_id 和 ts 是索引, pred 和 gt 是列。

现在我想:

  • 按 agent_id 分组
  • 在不关心顺序的情况下获取两列中相同唯一值的百分比

我已经实现了一个类似的指标,其中顺序很重要:

grouped_df.apply(lambda df: df.gt.eq(df.pred).mean()).to_dict()

而且我还实现了我想要假设predgt将是没有任何分组的普通列表的指标:

unordered_matches = len(set(pred) & set(gt)) / len(set(pred) | set(gt))

我现在如何通过 pandas 中的分组来实现这一点(理想情况下转换为 dict )?

为了更好地理解,以下示例数据的结果如何:

代理 0:

  • 设置(预测)-> {0, 1}; 设置(gt)-> {0, 1}
  • unordered_matches = 1 (100%)

代理 1:

  • 集合(预测)-> {0, 1, 2, 3}; 设置(gt)-> {0, 1}
  • unordered_matches = 0.5 (50%)

我会对特定问题的 pandas 解决方案以及如何翻译我的 python 公式以便它们与熊猫分组一起使用的更通用的解决方案感兴趣。

使用集合操作和groupby.apply

(df.groupby('agent_id')
   .apply(lambda x: len((S1:=set(x['pred'])) & (S2:=set(x['gt'])))/len(S1|S2))
)

output:

agent_id
0    1.0
1    0.5
dtype: float64

作为字典,添加.to_dict() : {0: 1.0, 1: 0.5}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM