【问题标题】:Comparing 'key answer' and 'answers' DataFrame in Pandas比较 Pandas 中的“关键答案”和“答案”DataFrame
【发布时间】:2020-12-09 09:20:51
【问题描述】:

我有这个主要的df1

Name | Course | Q_1 | Q_2 | ... | Q_60
John |  Phys  |  A  |  C  | ... |  D 
Karen|  Math  |  C  |  C  | ... |  E
 ... |  ...   | ... | ... | ... | ...

(~1200 个名字)

参考的关键答案是df2

1   2   3   4   ...   60
A | C | C | E | ... | D

我想比较 df1df2 来回答此类问题:

  • 哪些问题学生答对了?
  • 有多少学生答对了 Q_3、Q_4、Q_5 和 Q_10?

我已经尝试简单地进行条件比较,但这只会给我一个 np.array 布尔值:是否可以索引 True/False 的位置匹配任何给定的答案,返回类似:

df3

Name | Course | Q_1 | Q_2 | ... |Q_60
John |  Phys  |True |True | ... |True
Karen|  Math  |False|True | ... |False
...........

然后对 True 匹配条件进行条件计数,存储其位置以获得解决方案?

【问题讨论】:

  • 你能分享你到目前为止所做的事情以及你认为可能的答案吗?我们将审查并为您提供引导您走向正确方向的 cmets。
  • 我有一个包含 4 张纸的 DataFrame:其中两张由学生给出的答案组成,每人得到 60 个答案(30 个前测 + 30 个后测,但是测试本身是一样的!!);第三张是关键答案表,它的 30 个正确答案必须作为比较个人答案的指南(第四张只是存储计算)。我坚持将学生的答案与第三张纸进行比较,以一种应该可以找到其中(特别是)正确的方式。
  • 我已经设法简单地计算出正确答案的 number 个“如果比较”(“==”运算符),例如:right_answers = np.array(data[ ids_answer] == np.array(key_answer); 但不知道如何存储这些人在数据帧 (df1) 上保持正确位置以供将来检查(再次,重点是我的 2 个问题'已经修复了帖子)。无论如何,提前谢谢,任何建议都会有所帮助!

标签: python pandas dataframe rows


【解决方案1】:

使用add_preffixeq

t=df2.add_prefix('Q_').iloc[0]
df1.set_index(['Name','Course']).eq(t,1).reset_index()

示例

使用虚拟数据:

print(df1)
   Name Course Q_1 Q_2 Q_3
0   John   Phys   A   C   D
1  Karen   Math   C   C   E

print(df2)
   1  2  3
0  A  C  C

t=df2.add_prefix('Q_').iloc[0]
df1.set_index(['Name','Course']).eq(t,1).reset_index()

    Name Course    Q_1   Q_2    Q_3
0   John   Phys   True  True  False
1  Karen   Math  False  True  False

【讨论】:

  • 不起作用:它只是向 df1 添加了 60 个带有新 'Q_[number]' 索引的新列,并且输出值全部变为“false”,并且出现此错误:“FutureWarning: elementwise比较失败;改为返回标量,但将来将执行元素比较 res_values = method(rvalues)"
  • reset_index() 也没有很好地适用:索引就像把 Q_9 放在最后一样乱七八糟,因为它似乎看不到合数 eg '53'、'78' 或 '25',而不是 '5' '3'、'7' '8' 等等......无论如何,谢谢你的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
  • 2018-04-13
  • 1970-01-01
  • 2012-10-01
  • 2018-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多