我有一个包含12个不同检查数据的 Dataframe ;问题类型:A、B、C或D),回答:判断题和检查编号:一,二,...,十二。
我想做的是一个线路图的数量错误(假)答案的问题A只,分组的号码考试(如果它是第一个或第二个等)。
为此,我做了以下操作:
Quest_A = df2[(df2["type_question"] == "A") & (df2["correct"] == False)]
x = Quest_A['n_exam']
y = Quest_A['correct']
df = pd.DataFrame(data = zip(x, y),
columns = ['number', 'correct'])
sums = df.where(df['correct'] == False).groupby(['number']).count()
plt.plot(sums)
plt.show()
这里df2是我的 Dataframe ,包含了我所有的数据。
通过这样做,我的输出如下:
(https://i.stack.imgur.com/7aLV1.png)
我可以看到我的0号考试,我做了6个不好的答案。
但问题是,有一些考试中有0个错误答案的问题A,但由于我的方式创造我的情节,他们没有出现!
伟大的输出,我应该optain是以下,但我不能管理如何得到它:
(https://i.stack.imgur.com/flVVe.png)
下面是 Dataframe 的图片:
https://i.stack.imgur.com/Ok96O.png
谢谢你的帮忙!
1条答案
按热度按时间k2fxgqgv1#
所以,我想说几句
1.正如您所说,您不应该仅从选择
correct=False
行开始,您会丢失其他行的信息,而不会出现错误答案1.由于您只选择了False行,因此y只是一列false
1.不需要重建 Dataframe
df
。您的df
可以是Quest_A[['n_exam', 'correct']]
(只是选择列).where(df['correct'] == False)
是冗余的:所有df行都是correct==False
所以,我要做的是,保留正确的行,然后使用
sum
而不是count
来计数不是所有的行,而是所有具有True值的行,因为你要计数的是False值,所以只需要一个incorrect
或error
列所以
df2[df2['type_question']=='A']
仅为A类问题的行df2[df2['type_question']=='A'][['n_exam', 'error']]
是由df2行组成的 Dataframe (视图),其中包含类型A的问题,并且只有n_exam
和error
列df2[df2['type_question']=='A'][['number', 'error']].groupby('n_exam').sum()
以n_exam
为单位对前一个 Dataframe 进行分组,在每个组中,用组内的每列之和替换该列(即error
,因为它是除分组列n_exam
之外的唯一一列),一列布尔值之和就是True
的个数。最小的例子(这就是我在评论中的意思),因为这一个:
我得到这个