我有這個資料框,它看起來像這樣:
user_id :代表用戶
question_id : 代表問題編號
user_answer :用戶從 (A,B,C,D) 中選擇了特定問題的選項
正確答案:該特定問題的正確答案是什么
正確:如果 0.0 表示用戶回答不正確,如果 1.0 表示用戶回答正確
elapsed_time :它表示用戶回答該問題所用的時間(以分鐘為單位)
| 用戶身份 | 問題編號 | 用戶答案 | 正確答案 | 正確的 | elapsed_time |
|---|---|---|---|---|---|
| 1 | 130 | 一個 | 乙 | 0.0 | 2.00 |
| 1 | 130 | 乙 | 乙 | 1.0 | 5.00 |
| 1 | 130 | 乙 | 乙 | 1.0 | 2.00 |
| 2 | 10 | C | D | 0.0 | 7.00 |
| 2 | 10 | 一個 | D | 0.0 | 9.00 |
| 2 | 10 | 乙 | D | 0.0 | 13.00 |
| 2 | 10 | D | D | 1.0 | 4.00 |
| 2 | 10 | D | D | 1.0 | 1.50 |
我希望另一個資料框看起來像這樣
| 用戶身份 | 嘗試的問題 | 嘗試的獨特問題 | 百分比 |
|---|---|---|---|
| 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'})
這給了我嘗試的問題列,我如何找到嘗試的獨特問題列?
對于Unique Questions Attempted列,當用戶更正答案時,我需要該唯一條目。
例如 :
| 用戶身份 | 問題編號 | 用戶答案 | 正確答案 | 正確的 | elapsed_time |
|---|---|---|---|---|---|
| 1 | 130 | 一個 | 乙 | 0.0 | 2.00 |
| 1 | 130 | 乙 | 乙 | 1.0 | 5.00 |
| 1 | 130 | 乙 | 乙 | 1.0 | 2.00 |
| 2 | 10 | C | D | 0.0 | 7.00 |
| 2 | 10 | 一個 | D | 0.0 | 9.00 |
| 2 | 10 | D | D | 1.0 | 4.00 |
| 2 | 10 | D | D | 1.0 | 1.50 |
在這個資料框中:唯一的問題嘗試應該考慮用戶第一次糾正問題的時間,因為在這種情況下, 用戶 1在第二次和第三次嘗試中糾正了問題。它應該考慮第二次嘗試。用戶2也是如此,用戶2已經在第三次和第四次嘗試中更正了問題,應該考慮第三次嘗試
uj5u.com熱心網友回復:
創建每首正確答案的輔助柱user_id,并question_id通過鏈掩碼測驗==通過Series.eq用DataFrame.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
然后對于 countTrue的聚合sum和對于 count 的唯一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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/398839.html
