首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python Pandas复杂分组

Python Pandas复杂分组
EN

Stack Overflow用户
提问于 2018-08-15 09:18:42
回答 1查看 43关注 0票数 0

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

代码语言:javascript
运行
复制
     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

如果我执行以下group-by操作:

代码语言:javascript
运行
复制
df.groupby(["Name", "Status"]).last()

我得到了以下信息:

代码语言:javascript
运行
复制
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“分组结果,因为在dataframe中没有Joe的"out”值。

我希望能够从dataframe或后续的groupby中选择在某个日期范围内只有"In“状态或只有"out”状态的人,而不是在特定日期范围内既有“in”状态又有“out”状态的人。我对如何处理这个问题感到困惑。如果groupby结果给出如下结果,我就可以继续:

代码语言:javascript
运行
复制
Joe    Out   np. Nan

但事实并非如此。

哦,我最后才做groupby,因为我需要得到最后一个日期,人们会像Pete和Mary那样同时保留"In“和"out”状态。但我需要以不同的方式对待Joe -他在这段时间只有“in”状态,没有"out“状态。

如有任何指导,敬请惠顾。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-15 09:41:51

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

从…

代码语言:javascript
运行
复制
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

你能做到

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51851697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档