bugfix> python > 投稿

段落ペアのパンダデータフレームがあります。約500の段落があり、それぞれが次の形式でペアとしてリストされます(paragraphAでソートされ、最も高い予測でランク付けされます)。

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」の数と、これらの「1」が上位xの結果に表示される回数をカウントするにはどうすればよいですか? (xは、その段落の「1」の総数に基づいています。「1」が7つある場合、上位7つの結果を確認します)

上記の私の例では、Paragraph1のラベルの下に全体で3つの「1」がありますが、上の3つには2つの「1」しかありません。

したがって、その情報を抽出したいと思います。

1)全体的な1 = 3

2)上位3の1 = 2

回答 1 件
  • 列の「ラベル」に数字しか含まれていない場合、またはエントリが表示されているもの(つまり「1 ----」)であるかどうかはわかりません。この場合、まずこの方法で新しい列を作成することをお勧めします。

    df['new_label'] = df['label'].astype(str).str[0]
    df['new_label'] = df['new_label'].astype(int)
    
    

    「ラベル」列にすでに数字のみが入力されている場合はこのパッセージを無視し、以下では「new_label」ではなく「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
    
    

あなたの答え