我有一个如下数据框:
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的“入”和“出”状态的最后日期。但是我需要以不同的方式对待乔-他在此期间只有“处于”状态而没有“处于”状态-
任何指导表示赞赏。
答案 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