あなたの投稿のデータのサンプルを作成しました。これはあなたが探しているものですか?
私は虚偽のインジケータを小文字の文字列にしました。あなたのファイルに格納されているものが何であるかはわかりません。 python2を使用している場合、from io import StringIO
をfrom StringIO import StringIO
に変更することができます。
In [105]: import pandas as pd
...: from io import StringIO
...:
...: data = """Q666 True
...:
...: Q463 True
...:
...: Q056 True
...:
...: Q666 False
...: Q666 True
...:
...:
...: Q463 True
...:
...: Q056 True
...: Q666 False
...: Q463 False
...: Q666 False"""
...:
In [106]: df = pd.read_csv(StringIO(data), sep=" ", header=None)
In [107]: df.columns = [['question', 'answer']]
In [108]: df['answer'] = df['answer'].astype("str").apply(lambda x: x.lower())
In [109]: df
Out[109]:
question answer
0 Q666 true
1 Q463 true
2 Q056 true
3 Q666 false
4 Q666 true
5 Q463 true
6 Q056 true
7 Q666 false
8 Q463 false
9 Q666 false
私たちの条件によってグループを数えることができるように、一定の値をdataframeに割り当ててから、マルチインデックスを必要な場所に戻します。
In [110]: piv = (df
...: .assign(val = 1)
...: .groupby(["question", "answer"])
...: .count()
...: .unstack()['val'])
それは...あなたの答えのための
In [111]: piv['ratio'] = piv['true']/piv.sum(axis=1)
In [112]: piv.sort_values("ratio")
Out[112]:
answer false true ratio
question
Q666 3.0 2.0 0.400000
Q463 1.0 2.0 0.666667
Q056 NaN 2.0 1.000000
本当にありがとうございましたが、ここからは簡単です。私はパンダには新しく、groupby関数とunstack関数を学ばなければならなかったが、私が理解して、あなたのメソッドを使って答えを見つけることができたと思う。乾杯! –
もちろん、私は助けてうれしい! –