我有一个带有段落对的pandas数据帧。大约有500个段落,每个段落按以下格式列出一对(按段落A排序并按最高预测排序):
ParagraphA | paragraphB | label | prediction
Paragraph1 | Pragraph2 | 1 ----| 0.9890
Paragraph1 | Pragraph10 | 1 ----| 0.9870
Paragraph1 | Pragraph17 | 0 ----| 0.9860
Paragraph1 | Pragraph34 | 1 ----| 0.9820
我已经对此进行了排序和分组(事先将段落和预测按随机顺序排列):
sorted_grouped = df.sort_index(by=['paragraphA', 'predictions'], ascending=[True, False])
这是一个排名问题,我试图预测段落之间存在链接的可能性。我现在想根据实际存在的链接数来衡量精度(参见'标签')。
我如何计算每个段落(在A段下)的标签下的数量,以及这些' 1出现在前x个结果中的次数? (x基于该段的' 1的总数。如果有七个&1 39,我会查看前七个结果)
对于上面的示例,我们假设Paragraph1的标签下面总共有三个,但在前三个中,只有两个' 1' 1'秒。
我想提取该信息:
1)总体1' s = 3
2)1' s在前3 = 2
答案 0 :(得分:0)
我还没有理解列“label”是否只有数字,或者条目是否与显示的那样(即'1 ----')。在这种情况下,我建议首先以这种方式创建一个新列:
df['new_label'] = df['label'].astype(str).str[0]
df['new_label'] = df['new_label'].astype(int)
如果'label'列已经只填充了数字,请忽略此段落,并在下面使用'label'而不是'new_label' (我还假设'new_label'列中的值只有0或1):
total = df.groupby('ParagraphA')['new_label'].sum() # this gives you the number of 1s
percentage = df.groupby('ParagraphA')['new_label'].apply(lambda g : g.head(g.sum()).sum() / g.sum()) # this gives you the percentage of 1s in the first x rows