【问题标题】:Pairwise Cohen's Kappa of rows in DataFrame in Pandas (python)Pandas 中 DataFrame 中的成对 Cohen 行 Kappa (python)
【发布时间】:2021-07-13 08:56:34
【问题描述】:

非常感谢您对此提供的帮助。我正在使用 jupyter 笔记本。

我有一个数据框,我想在其中计算评估者间的可靠性。我想通过 ID 列的值对它们进行成对比较(所有 ID 的频率为 2,每个编码器一个)。所有 ID 值都代表不同的文章,因此我不想将它们全部比较,但更多的是取每对(也可能是每列)的评估者间可靠性的平均值。

N.  ID.     A.  B.      
0   8818313 Yes Yes     1.0 1.0 1.0 1.0 1.0 1.0
1   8818313 Yes No      0.0 1.0 0.0 0.0 1.0 1.0 
2   8820105 No  Yes     0.0 1.0 1.0 1.0 1.0 1.0 
3   8820106 No  No      0.0 0.0 0.0 1.0 0.0 0.0 

我已经能够找到一些关于 cohen 的 k 的说明,但没有找到如何在 ID 列中按值成对执行此操作的说明。

有人知道怎么做吗?

【问题讨论】:

  • 右边的 0 和 1 是什么?它们是否相关?
  • 在你的例子中,只有 ID 8818313 有两个编码器。这是预期的吗?是否应该删除只有一个编码器的 ID?
  • @Anna 如果它解决了您的问题,请接受它作为最终答案。谢谢。

标签: arrays pandas pairwise cohen-kappa


【解决方案1】:

以下是我的处理方法:

from io import StringIO
from sklearn.metrics import cohen_kappa_score

df = pd.read_csv(StringIO("""
N,ID,A,B,Nums
0,   8818313, Yes, Yes,1.0 1.0 1.0 1.0 1.0 1.0
1,   8818313, Yes, No,0.0 1.0 0.0 0.0 1.0 1.0 
2,   8820105, No,  Yes,0.0 1.0 1.0 1.0 1.0 1.0 
3,   8820105, No,  No,0.0 0.0 0.0 1.0 0.0 0.0 """))


def kappa(df):
    nums1 = [float(num) for num in df.Nums.iloc[0].split(' ') if num]
    nums2 = [float(num) for num in df.Nums.iloc[1].split(' ') if num]
    return cohen_kappa_score(nums1, nums2)

df.groupby('ID').apply(kappa)

这将生成:

ID
8818313    0.000000
8820105    0.076923
dtype: float64

【讨论】:

  • 对不起,还有一件事。在 def kappa(df) 函数中,“num”代表什么/它是如何工作的?我不断收到错误消息“'DataFrame' 对象没有属性 'Nums'”
  • 抱歉看到消息晚了。 df.Nums.iloc[0] 获取字符串,例如 1.0 1.0 1.0 1.0 1.0 1.0split(' ') 将其转换为字符串列表,如下所示:[ '1.0', '1.0', '1.0', '1.0', '1.0', '1.0']。然后我使用列表推导将所有字符串转换为浮点数,如果它们不为空的话。 num 只是列表理解中使用的一个变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 1970-01-01
  • 1970-01-01
  • 2020-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多