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

Python Pandas复杂分组

Python Pandas复杂分组

一只名叫tom的猫 2021-05-14 18:15:42
我有一个数据框,如下所示:     Name    Status    Date1    Joe     In    1/2/20032    Pete    Out   1/2/20033    Mary    In    1/2/2003• • •4    Joe     In    3/4/20045    Pete    In    3/5/20046    Mary    Out   4/8/2004如果我执行以下分组操作:df.groupby(["Name", "Status"]).last()我得到以下内容:Joe    In    3/4/2004Pete   In    3/5/2004       Out   1/2/2003Mary   In    1/2/2003       Out   4/8/2004请注意,Joe没有“ out”分组结果,因为在数据框中没有Joe的“ out”值。我希望能够从数据框或随后的分组依据中选择在整个日期范围内仅具有“进入”状态或仅具有“离开”状态的人员,而不是同时具有“进入”和“离开”的人员特定的日期范围。我很困惑如何解决这个问题。如果groupby结果给我类似的信息,我可以继续进行以下操作:Joe    Out   np. Nan但事实并非如此。哦,我最后一次进行分组比对是因为我需要获得人们离开Pete和Mary之类的同时处于“进入”和“离开”状态的最后日期。但是我需要不同对待乔-他在此期间仅具有“处于”状态而没有“处于”状态的人。任何指导表示赞赏。
查看完整描述

1 回答

?
达令说

TA贡献1821条经验 获得超6个赞

不知道你想要什么。但是您可以尝试重新索引



x = df.groupby(['Name', 'Status']).last()



Date

Name    Status  

Joe     In  3/4/2004

Mary    In  1/2/2003

        Out 4/8/2004

Pete    In  3/5/2004

        Out 1/2/2003

你可以做到


size = x.index.levels[0].size

f = np.repeat(np.arange(size), 2)

s = [0,1] * size


x.reindex(pd.MultiIndex(levels=x.index.levels, labels=[f, s]))


                 Date

Name    Status  

Joe     In       3/4/2004

        Out      NaN

Mary    In       1/2/2003

        Out      4/8/2004

Pete    In       3/5/2004

        Out      1/2/2003


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

添加回答

举报

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