Python Pandas复杂分组

时间:2018-08-15 01:18:42

标签: python pandas group-by

我有一个如下数据框:

     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的“入”和“出”状态的最后日期。但是我需要以不同的方式对待乔-他在此期间只有“处于”状态而没有“处于”状态-

任何指导表示赞赏。

1 个答案:

答案 0 :(得分:1)

不确定您想要什么。但是您可以尝试重新索引

来自

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