gpt4 book ai didi

python - Pandas groupby 聚合截断最早日期而不是最旧日期

转载 作者:行者123 更新时间:2023-11-28 18:14:32 24 4
gpt4 key购买 nike

我试图从日期范围的末尾而不是从头开始聚合。尽管我认为向石斑鱼添加 closed='right' 可以解决问题,但事实并非如此。请让我知道如何实现底部显示的所需输出,谢谢。

import pandas as pd
df = pd.DataFrame(columns=['date','number'])
df['date'] = pd.date_range('1/1/2000', periods=8, freq='T')
df['number'] = pd.Series(range(8))
df

date number
0 2000-01-01 00:00:00 0
1 2000-01-01 00:01:00 1
2 2000-01-01 00:02:00 2
3 2000-01-01 00:03:00 3
4 2000-01-01 00:04:00 4
5 2000-01-01 00:05:00 5
6 2000-01-01 00:06:00 6
7 2000-01-01 00:07:00 7

通过日期的 groupby 和聚合,我得到以下结果。因为我有 8 个日期并且我按 3 个周期分组,它必须选择是截断最早的日期组还是最旧的日期组,并且它选择最旧的日期组(最旧的日期组的计数为 2):

df.groupby(pd.Grouper(key='date', freq='3T')).agg('count')

date number
2000-01-01 00:00:00 3
2000-01-01 00:03:00 3
2000-01-01 00:06:00 2

我想要的输出是截断最早日期组:

date                number
2000-01-01 00:00:00 2
2000-01-01 00:02:00 3
2000-01-01 00:05:00 3

请告诉我这是如何实现的,我希望只有一个我忽略的可以设置的参数。请注意,这类似于 this问题,但我的问题是特定于日期截断的。

编辑:为了重构问题(感谢 Alexdor),pandas 中的默认行为是按句点 [0, 3), [3, 6], [6, 9) 装箱,但我想按 ( -1, 2], (2, 5], (5, 8]

最佳答案

似乎 grouper 函数从您传递给它的系列中最旧的时间开始构建垃圾箱。我看不出有什么方法可以让它从最新的时间开始构建 bin,但是从头开始构建 bin 相当容易。

freq = '3min'

minTime = df.date.min()
maxTime = df.date.max()
deltaT = pd.Timedelta(freq)
minTime -= deltaT - (maxTime - minTime) % deltaT # adjust min time to start of first bin
r = pd.date_range(start=minTime, end=maxTime, freq=freq)

df.groupby(pd.cut(df["date"], r)).agg('count')

给予

date                                     date number        
(1999-12-31 23:58:00, 2000-01-01 00:01:00] 2 2
(2000-01-01 00:01:00, 2000-01-01 00:04:00] 3 3
(2000-01-01 00:04:00, 2000-01-01 00:07:00] 3 3

关于python - Pandas groupby 聚合截断最早日期而不是最旧日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49281423/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com