为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

精慕HU 2023-09-05 15:13:56
我有一些在线任务的输出,我需要将其整理成可用的评分形式,这需要多个条件才能正确整理。我尝试使用 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]。


查看完整回答
反对 回复 2023-09-05
  • 1 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信