我有一些在線任務的輸出,我需要將其整理成可用的評分形式,這需要多個條件才能正確整理。我嘗試使用 if 和 else 語句,但我很難以這種方式滿足所需的所有條件。所需數據和條件的描述 - 在第一列中,有與該人的響應相對應的三個可能值:“是”、“否”或“NR”(表示尚未給出響應)。第二列是一種計數器,應該按順序從 1 到 5 運行,但如果用戶按住按鍵時間過長,它會重復一個值。因此,對于第二列中的每個計數,我希望第一列中有一個相應的響應,這應該是針對該計數給出的第一個響應(“是”或“否”)。如果在整個計數期間沒有給出響應,則應保持為“NR”。然后計數再次從 1 到 5 重復。例如,這個輸入數據: response count0 yes 11 yes 12 yes 13 no 14 yes 15 no 26 no 27 no 28 NR 39 NR 310 no 311 NR 312 NR 413 NR 414 NR 415 yes 516 yes 517 NR 118 NR 119 NR 220 yes 321 yes 322 yes 323 no 424 yes 425 no 5應該減少到這樣: response count0 yes 11 no 22 no 33 NR 44 yes 55 NR 16 NR 27 yes 38 no 49 no 5這是一個有點令人困惑的問題,到目前為止,我還沒有找到應用于數組的條件組合或 if/else 語句來給我想要的結果。任何幫助或想法將不勝感激!輸入數據的源代碼:response = ['yes','yes','yes','no','yes','no','no','no','NR','NR','no','NR','NR','NR','NR','yes','yes','NR','NR','NR','yes','yes','yes','no','yes','no']count = [1,1,1,1,1,2,2,2,3,3,3,3,4,4,4,5,5,1,1,2,3,3,3,4,4,5]data_dict = {'response': response, 'count':count}data = pd.DataFrame(data_dict)
1 回答

呼喚遠方
TA貢獻1856條經驗 獲得超11個贊
嘗試這個:
df.groupby(['count', (df['count'] != df['count'].shift()).cumsum()])['response']\
.apply(lambda x: 'NR' if (x.nunique()==1) & (x == 'NR').all() else x.loc[x!='NR'].iloc[0])\
.sort_index(level=1).reset_index(level=1, drop=True)
輸出:
count
1 yes
2 no
3 no
4 NR
5 yes
1 NR
2 NR
3 yes
4 no
5 no
Name: response, dtype: object
細節:
讓我們首先生成一個序列來獲取重復組:
(df['count'] != df['count'].shift()).cumsum()
使用這個系列以及“計數”,我們可以創建響應組,
如果唯一響應的計數等于 1 并且該響應為“NR”,則為該組返回“NR”。否則,使用 返回第一個不是“NR”的響應x.loc[X!='NR'].iloc[0]。
添加回答
舉報
0/150
提交
取消