【发布时间】:2020-11-13 02:50:37
【问题描述】:
-- 编辑我注意到我输入的时间不是我想要的。我将下午 12 点之后的时间转换为 24 小时制约定。不过,unutbu 的回答应该还是很清楚的。
-- 第二次编辑。我更改了数据以制作更好的示例。
以下是按日期索引的时间序列。我想从 start_datetime 开始进行聚合,并根据下面的 timedelta 继续聚合(9.5 小时 = 34200 秒)。
def main():
# start_datetime = datetime.datetime(2013, 1, 1, 8)
# end_datetime = datetime.datetime(2013, 1, 1, 5, 30)
s = pd.Series(
np.arange(2, 10),
pd.to_datetime([
'20130101 7:34:04', '20130101 8:34:08', '20130101 10:34:08',
'20130101 12:34:15', '20130101 13:34:28', '20130101 12:34:54',
'20130101 14:34:55', '20130101 17:29:12']))
print(s)
bar_size = datetime.timedelta(seconds=60*60*9.5)
time_group = pd.Grouper(
freq=pd.Timedelta(bar_size), closed='left', label='right')
foobar = s.groupby(time_group).agg(np.sum)
print(foobar)
if __name__ == "__main__":
main()
运行上面的代码会输出如下:
2013-01-01 09:30:00 5
2013-01-01 19:00:00 39
Freq: 570T, dtype: int64
pandas 内部决定从午夜开始分组,而不是早上 8:00。我找不到强制数据框在上午 8:00 开始分组的方法。有人有使用 pandas 函数的解决方案吗?
【问题讨论】: