【问题标题】:groupby with a condition in pandas dataframe [duplicate]具有熊猫数据框中条件的groupby [重复]
【发布时间】:2020-03-25 00:36:48
【问题描述】:

我需要根据包含两列的条件进行分组,例如,我有以下数据框:

item   start_date    end_date
A      10/03/2019    31/03/2019
B      10/03/2019    31/03/2019
A      31/03/2019    10/04/2019
B      31/03/2019    10/04/2019

如果 end_date 等于 start_date 并且结果行应该具有第一行的 start_date 和第二行的 end_date,我需要对项目进行分组

item   start_date    end_date
A      10/03/2019    10/04/2019
B      10/03/2019    10/04/2019

一个更简单的例子:

item   start_date    end_date
A          a             b
A          b             c
A          d             e
A          e             f

想要的结果:

   item   start_date    end_date
    A          a             c
    A          d             f

【问题讨论】:

  • 那是怎样的groupby?听起来更像是一个过滤器。同样在您的示例数据中,没有一行满足该条件,那么您如何达到预期结果?还是您的意思是“每月的同一天”?
  • 对于第一个项目Aend_date 等于第二个项目Astart_date,因此我们分组并为结果行提供第一个@ 的start_date 987654330@ 和第二个Aend_date
  • 我正在调查这是否是我需要的答案
  • @a_guest 这几乎是一个解决方案,但在我的情况下它不起作用,因为该项目可以在不同的日期间隔内重复,就像我在问题中更新的那样,这个解决方案将分组所有.
  • @a_guest 做更多测试,我确保它适用于所有情况,这是我需要的解决方案,谢谢!

标签: python-3.x pandas


【解决方案1】:

我认为按值对 DataFrame 进行排序就可以了。这也取决于你的目标。

df = df.sort_values(by=['start_date', 'end_date']).reset_index(drop=True)

然后您可以对已排序的行进行迭代并应用一个满足您需要的函数。我没有看到对此的映射解决方案。

【讨论】:

  • groupby 必须包含 item 列,我认为这不是 100% 正确的。
  • 如果你想迭代你可以使用组。我更新了答案。
  • 我会尝试您的解决方案并提供反馈,谢谢!
  • 就试试排序吧,如果需要排序,至少我是这么理解的。接下来你想做什么?
  • 按 'start_date'、'end_date' 分组并没有真正帮助,请参阅问题的更新。
猜你喜欢
  • 2020-01-30
  • 1970-01-01
  • 2019-04-12
  • 2019-10-13
  • 2016-10-09
  • 2013-12-19
  • 2021-04-30
  • 1970-01-01
  • 2019-10-11
相关资源
最近更新 更多