【问题标题】:Column value changes based on anoother column's value列值根据另一列的值更改
【发布时间】:2021-09-05 01:43:55
【问题描述】:

我有以下数据框:

id questionCode answer difficulty
1  3t4          False   0
2  3t4          True    0
3  3t5          False   0
4  3t6          True    0
5  3t4          False   0

我希望根据问题被正确或错误回答的频率将难度更改一分。难度已经为 0(即非常容易),并且问题一直被回答正确,它不能低于 0。

所以在这种情况下,输出将是:

    id questionCode answer difficulty
    1  3t4          False   1
    2  3t4          True    1
    3  3t5          False   1
    4  3t6          True    0
    5  3t4          False   1

这是因为3t4 一次正确回答两次错误,3t5 一次错误回答,3t6 一次正确回答。虽然不是很优雅,但是一旦代码完成,“最终难度结果”就会出现在每一行。

我的做法:

import pandas as pd
testing = [[1,'3t4', False, 0],[2,'3t4', True, 0],[3,'3t5', False, 0], [4,'3t6', True, 0], [5,'3t4', False, 0]]
df_testing = pd.DataFrame(testing,columns=['id', 'questionCode', 'answer', 'difficulty'])
print (df_testing)
df_testing_update = df_testing.questionCode.map({'3t4':1, '3t5':1, '3t6':-1})
df_testing.difficulty = (df_testing.difficulty + df_testing_update).clip(lower=0)
df_testing_update

输出:

   id questionCode  answer  difficulty
0   1          3t4   False           0
1   2          3t4    True           0
2   3          3t5   False           0
3   4          3t6    True           0
4   5          3t4   False           0

0    1
1    1
2    1
3   -1
4    1

问题:

  1. 当我的数据集很大时,如何扩展它?
  2. 还有其他方法吗,比如遍历行和嵌套 if ?

【问题讨论】:

  • Is there any other approach, something like iterating over the rows and nesting if's? 如果使用这种方法,则解决方案非常慢。因此无法在庞大的数据集中进行扩展。
  • 我认为解决方案很好,在庞大的数据集中非常好
  • @jezrael 谢谢。我只是不知道如何将其转换为更大的数据集。这可能是微不足道的,但我无法弄清楚语法。
  • 这个问题不适合SO,移到code review

标签: python pandas dataframe loops scalability


【解决方案1】:

我不确定我是否理解正确。但在我看来,你想这样做:

  1. 将所有正确答案映射到 -1,将错误答案映射到 1
  2. 使用 group by 总结每个问题代码中的所有回答
df_testing['answerCode'] = df_testing['answer'].map(lambda x: 1 if x==False else -1)
df_testing['difficulty'] = df_testing.groupby('questionCode')['answerCode'].transform(lambda x: max(sum(x),0))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 1970-01-01
    • 2022-12-16
    • 2012-10-15
    • 2018-04-15
    • 2019-06-19
    • 1970-01-01
    相关资源
    最近更新 更多