2016-11-11 60 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

当然,我很乐意帮助! –