python - 有没有一种方法可以使用天数之间的最小差异对熊猫进行分组?
问题描述
我解释得更好:我有一个带有这些列的 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)。
我试图用一个函数来做,但结果很混乱而且容易出错,我想知道是否有更“干净”的方法。
解决方案
由于您已经有了不错的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
推荐阅读
- python - 使用 oct2py 执行 .m 并存储在变量中(不将 .mat 存储在磁盘上)
- pandas - 如何在不聚合的情况下将熊猫组翻译为pyspark?
- r - 如何使用 rpy2 从 python 中使用 glmulti?
- reactjs - 如何使用不同的技术在现有网站上配置 react + webpack + babel
- javascript - 将原型 Ajax POST 重建为“普通”js
- reactjs - react js中$q.all的替代品是什么?
- javascript - 根据 ReactJS 中的值更改 axios 获取 url
- ruby-on-rails - 如何从两个对象数组中获取“索引”?
- javascript - 我怎样才能取出我的数据:错误未定义(javascript & jQuery)
- flutter - 是否可以在颤动时每 x 秒调用一次函数?