【问题标题】:Checking unique enteries in pandas dataframe of user id interactions检查用户 id 交互的 pandas 数据框中的唯一条目
【发布时间】:2021-12-30 07:25:52
【问题描述】:

我有这个看起来像这样的数据框:

user_id : 代表用户

question_id : 代表问题编号

user_answer : 用户从 (A,B,C,D) 中选择了哪个选项

correct_answer:该特定问题的正确答案是什么

正确:如果 0.0 表示用户回答不正确,如果 1.0 表示用户回答正确

elapsed_time : 它表示用户回答该问题所用的分钟数

user_id question_id user_answer correct_answer correct elapsed_time
1 130 A B 0.0 2.00
1 130 B B 1.0 5.00
1 130 B B 1.0 2.00
2 10 C D 0.0 7.00
2 10 A D 0.0 9.00
2 10 B D 0.0 13.00
2 10 D D 1.0 4.00
2 10 D D 1.0 1.50

我希望另一个数据框看起来像这样

user_id Questions Attempted Unique Questions Attempted Percentage
1 9000 6000 =(6000/13169)*100
2 5000 4800 =(5000/13169)*100
5 12000 10000 =(10000/13169)*100
15 1000 30 =(30/13169)*100
23 255 255 =(255/13169)*100

到目前为止我所做的就是这样

df_total_questions_attempted = df.groupby(['user_iD'], as_index=False , sort=False)['question_id'].count()

df_total_questions_attempted = df_total_questions_attempted.rename(columns={'question_id': 'Total Questions Attempted'})   

这给了我 Questions Attempted 列,我如何找到 Unique Questions Attempted 列?

对于 Unique Questions Attempted 列,当用户更正答案时,我需要该唯一条目。

例如:

user_id question_id user_answer correct_answer correct elapsed_time
1 130 A B 0.0 2.00
1 130 B B 1.0 5.00
1 130 B B 1.0 2.00
2 10 C D 0.0 7.00
2 10 A D 0.0 9.00
2 10 D D 1.0 4.00
2 10 D D 1.0 1.50

在此数据框中:在用户第一次更正问题时应考虑独特的问题尝试,如本例所示 用户 1 在第二次和第三次尝试中更正了问题。它应该考虑第二次尝试。 用户 2 也是如此,用户 2 在第 3 次和第 4 次尝试中更正了问题,应该考虑 第 3 次尝试

【问题讨论】:

  • 计数Percentage栏目怎么样?
  • @jezrael:唯一问题总数为:13169。因此,用于百分比的公式为:(尝试的唯一问题数/13169)*100
  • 超级,只需编辑答案。

标签: pandas dataframe unique


【解决方案1】:

为每个user_idquestion_id 的第一个正确答案创建帮助列,通过链掩码测试== 通过Series.eqDataFrame.duplicated

df['new'] = df['correct'].eq(1) & ~df.duplicated(['user_id','question_id','correct'])
print (df)
   user_id  question_id user_answer correct_answer  correct  elapsed_time  \
0        1          130           A              B      0.0           2.0   
1        1          130           B              B      1.0           5.0   
2        1          130           B              B      1.0           2.0   
3        2           10           C              D      0.0           7.0   
4        2           10           A              D      0.0           9.0   
5        2           10           B              D      0.0          13.0   
6        2           10           D              D      1.0           4.0   
7        2           10           D              D      1.0           1.5   

     new  
0  False  
1   True  
2  False  
3  False  
4  False  
5  False  
6   True  
7  False 

然后对于计数Trues 聚合sum 和计数唯一questions 使用DataFrameGroupBy.nunique

df1 = (df.groupby(['user_id'])
        .agg(**{'Questions Attempted':('question_id','nunique'),
                'Unique Questions Attempted':('new','sum')})
        .reset_index())

最后似乎百分比是必要的除以独特问题的数量:

no_uniq_q = df['correct'].nunique()
df1['Percentage'] = df1['Unique Questions Attempted'].div(no_uniq_q).mul(100)
print (df1)
   user_id  Questions Attempted  Unique Questions Attempted  Percentage
0        1                    1                           1        50.0
1        2                    1                           1        50.0

【讨论】:

    猜你喜欢
    • 2018-06-23
    • 2021-09-29
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 2019-08-24
    • 2015-08-05
    • 2020-03-05
    • 2018-10-01
    相关资源
    最近更新 更多