猿问

Python Pandas复杂分组

我有一个数据框,如下所示:


     Name    Status    Date


1    Joe     In    1/2/2003

2    Pete    Out   1/2/2003

3    Mary    In    1/2/2003

• • •

4    Joe     In    3/4/2004

5    Pete    In    3/5/2004

6    Mary    Out   4/8/2004

如果我执行以下分组操作:


df.groupby(["Name", "Status"]).last()

我得到以下内容:


Joe    In    3/4/2004

Pete   In    3/5/2004

       Out   1/2/2003

Mary   In    1/2/2003

       Out   4/8/2004

请注意,Joe没有“ out”分组结果,因为在数据框中没有Joe的“ out”值。


我希望能够从数据框或随后的分组依据中选择在整个日期范围内仅具有“进入”状态或仅具有“离开”状态的人员,而不是同时具有“进入”和“离开”的人员特定的日期范围。我很困惑如何解决这个问题。如果groupby结果给我类似的信息,我可以继续进行以下操作:


Joe    Out   np. Nan

但事实并非如此。


哦,我最后一次进行分组比对是因为我需要获得人们离开Pete和Mary之类的同时处于“进入”和“离开”状态的最后日期。但是我需要不同对待乔-他在此期间仅具有“处于”状态而没有“处于”状态的人。


任何指导表示赞赏。


一只名叫tom的猫
浏览 157回答 1
1回答

达令说

不知道你想要什么。但是您可以尝试重新索引从x = df.groupby(['Name', 'Status']).last()DateName    Status  Joe     In  3/4/2004Mary    In  1/2/2003        Out 4/8/2004Pete    In  3/5/2004        Out 1/2/2003你可以做到size = x.index.levels[0].sizef = np.repeat(np.arange(size), 2)s = [0,1] * sizex.reindex(pd.MultiIndex(levels=x.index.levels, labels=[f, s]))                 DateName    Status  Joe     In       3/4/2004        Out      NaNMary    In       1/2/2003        Out      4/8/2004Pete    In       3/5/2004        Out      1/2/2003
随时随地看视频慕课网APP

相关分类

Python
我要回答