猿问

将多个条件应用于 python 数据框

我有一些在线任务的输出,我需要将其整理成可用的评分形式,这需要多个条件才能正确整理。我尝试使用 if 和 else 语句,但我很难以这种方式满足所需的所有条件。所需数据和条件的描述 - 在第一列中,有与该人的响应相对应的三个可能值:“是”、“否”或“NR”(表示尚未给出响应)。第二列是一种计数器,应该按顺序从 1 到 5 运行,但如果用户按住按键时间过长,它会重复一个值。因此,对于第二列中的每个计数,我希望第一列中有一个相应的响应,这应该是针对该计数给出的第一个响应(“是”或“否”)。如果在整个计数期间没有给出响应,则应保持为“NR”。然后计数再次从 1 到 5 重复。例如,这个输入数据:


   response  count

0       yes      1

1       yes      1

2       yes      1

3        no      1

4       yes      1

5        no      2

6        no      2

7        no      2

8        NR      3

9        NR      3

10       no      3

11       NR      3

12       NR      4

13       NR      4

14       NR      4

15      yes      5

16      yes      5

17       NR      1

18       NR      1

19       NR      2

20      yes      3

21      yes      3

22      yes      3

23       no      4

24      yes      4

25       no      5

应该减少到这样:


  response  count

0      yes      1

1       no      2

2       no      3

3       NR      4

4      yes      5

5       NR      1

6       NR      2

7      yes      3

8       no      4

9       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)


精慕HU
浏览 108回答 1
1回答

呼唤远方

尝试这个: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)输出:count1    yes2     no3     no4     NR5    yes1     NR2     NR3    yes4     no5     noName: response, dtype: object细节:让我们首先生成一个序列来获取重复组:(df['count'] != df['count'].shift()).cumsum()使用这个系列以及“计数”,我们可以创建响应组,如果唯一响应的计数等于 1 并且该响应为“NR”,则为该组返回“NR”。否则,使用 返回第一个不是“NR”的响应x.loc[X!='NR'].iloc[0]。
随时随地看视频慕课网APP

相关分类

Python
我要回答