【问题标题】:Python Pandas Complex GroupingPython Pandas 复杂分组
【发布时间】:2018-08-15 09:41:50
【问题描述】:

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

     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 中选择在某个日期范围内只有“In”状态或“out”状态的人,而不是同时具有“in”和“的人特定日期范围内的“出局”。我对如何处理这个问题感到困惑。如果 groupby 结果给了我类似的信息,我可以继续:

Joe    Out   np. Nan

但事实并非如此。

哦,我最后做 groupby,因为我需要得到人们离开“In”和“out”状态的最后日期,比如 Pete 和 Mary。但我需要以不同的方式对待乔——他在此期间只有“入”状态而没有“出”状态。

任何指导表示赞赏。

【问题讨论】:

  • 你的预期输出是什么
  • 不确定您提出什么解决方案
  • 我需要 3 个数据框,它们看起来像 groupby 的结果,每个分组状态的最后日期。在一个只有 "in"s 的数据框名称中。在一个只有“出局”的数据框名称中。在带有“in”和“out”的第三个数据框名称中。每个数据框都应该有状态(组)和最后日期。因此,在我上面的组中,Joe 将在一个数据帧中,Pete 和 Mary 在第二个数据帧中,并且没有第三帧,因为没有名称只有“out”状态。

标签: python pandas group-by


【解决方案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

【讨论】:

  • 这就是我要找的!你能解释一下解决方案吗?我不明白语法。提前致谢。
  • 嗨风暴。那么,您在 groupby 之后有一个 MultiIndex 数据框,对吗?我所做的是创建一个新的MultiIndex 并使x 遵循这个多索引。 MultiIndex 具有级别和值,我创建它们使得所有 level=0level=1 分别遵循模板 [0,0,1,1,2,2,3,3,4,4,....][0,1,0,1,0,1,0,1....]。这样,每个 Name 将有两行(因为第一列表每个数字有两个),每个Status 将有一个In 和一个Out(因为[0,1,0,1])等。不确定这是最简单的方法,但它是在尝试thesoluti 时想到的跨度>
  • 感谢您解释拉斐尔。我会消化你的解释,如有必要,我会回来跟进!
猜你喜欢
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 2020-05-15
  • 2019-02-16
  • 2021-04-06
  • 2014-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多