2016-11-11 70 views
1

我有一個大的數據幀爲其中兩個列是:大熊貓:查詢一個數據幀 - 多個標準

  • 一個問題碼(例如Q453)
  • True或False來表示是否將問題被回答正確

我不知道所有可能的問題代碼,並且每個問題已被多次回答。喜歡的東西:

Q666真

Q463真

Q056真

Q666假

我想知道哪些問題是最簡單的,正是這問題有嘗試的比例最高糾正答案。 使用熊貓達到此目的的步驟是什麼?

回答

0

我剛剛從你的文章中提取了一些數據。這是你在找什麼?

我製作了真/假指標小寫字符串;不確定它們存儲在您的文件中。如果您使用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 

指定一個恆定值,以數據幀,所以我們可以指望我們GROUPBY條件,然後將多指標回到我們需要它。

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

當然,我很樂意幫助! –