首页 > 解决方案 > 有没有一种方法可以使用天数之间的最小差异对熊猫进行分组?

问题描述

我解释得更好:我有一个带有这些列的 DataFrame:date(一年中的日期),groc(一个浮点值)和第三列dif,日期之间的天数差异。最后一个值从 0 到 20。我想找到一种简单的方法来使用最少 7 天的块对我的数据框进行分组,例如:

    date        groc    day         dif
2   2020-09-18  7.94    Friday      1.0
3   2020-09-19  13.43   Saturday    1.0
4   2020-09-22  14.14   Tuesday     3.0
5   2020-09-23  3.07    Wednesday   1.0
6   2020-09-24  7.79    Thursday    1.0
7   2020-09-25  9.17    Friday      1.0
8   2020-09-26  10.44   Saturday    1.0
9   2020-09-28  3.13    Monday      2.0
10  2020-10-05  20.56   Monday      7.0

在这种情况下,我想这样分组:

2   2020-09-18  7.94    Friday      1.0
3   2020-09-19  13.43   Saturday    1.0
4   2020-09-22  14.14   Tuesday     3.0
5   2020-09-23  3.07    Wednesday   1.0
6   2020-09-24  7.79    Thursday    1.0. 

diff参数的和正好是7。

那么下一组将是:

7   2020-09-25  9.17    Friday      1.0
8   2020-09-26  10.44   Saturday    1.0
9   2020-09-28  3.13    Monday      2.0
10  2020-10-05  20.56   Monday      7.0

注意dif参数的总和大于7导致最后一个值总和超过7,实际上是11(1+1+2+7)。

我试图用一个函数来做,但结果很混乱而且容易出错,我想知道是否有更“干净”的方法。

标签: pythonpandasdataframedatetimegrouping

解决方案


由于您已经有了不错的dif列,您可以计算 cumsum 模 7,然后计算diff,如果这个低于 0,这意味着您需要开始一个新组:

grouper = (df['dif'].cumsum()%7).diff(1).lt(0).cumsum()

df.groupby(grouper)

输出:

# group 0
           date   groc        day  dif
  2  2020-09-18   7.94     Friday  1.0
  3  2020-09-19  13.43   Saturday  1.0
  4  2020-09-22  14.14    Tuesday  3.0
  5  2020-09-23   3.07  Wednesday  1.0

# group 1
           date   groc       day  dif
  6  2020-09-24   7.79  Thursday  1.0
  7  2020-09-25   9.17    Friday  1.0
  8  2020-09-26  10.44  Saturday  1.0
  9  2020-09-28   3.13    Monday  2.0
 10  2020-10-05  20.56    Monday  7.0

推荐阅读