2016-11-11 4 views
1

複数の条件:パンダ:DATAFRAME照会 - 列の2がであるために、私は大規模なデータフレームを持って

  • 質問コード(例えばQ453)
  • TrueまたはFalseの質問がかどうかを示すために

私はすべての可能な質問コードを知りませんし、各質問は複数回回答されています。以下のような何か:

質問は試行の最も高い割合を持って、正確に、私は質問が最も簡単であるかを知ることを望む

偽Q666真

Q463真

Q056真

Q666、答えを訂正する。 パンダを使ってこれを達成するための手順は何ですか?

答えて

0

あなたの投稿のデータのサンプルを作成しました。これはあなたが探しているものですか?

私は虚偽のインジケータを小文字の文字列にしました。あなたのファイルに格納されているものが何であるかはわかりません。 python2を使用している場合、from io import StringIOfrom 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 
+0

本当にありがとうございましたが、ここからは簡単です。私はパンダには新しく、groupby関数とunstack関数を学ばなければならなかったが、私が理解して、あなたのメソッドを使って答えを見つけることができたと思う。乾杯! –

+0

もちろん、私は助けてうれしい! –

関連する問題