如何在Python Pandas中按时间间隔对数据进行分组

如何在Python Pandas中按时间间隔对数据进行分组

当你遇到时间序列分析时,按时间间隔对数据进行分组是非常明显的。时间序列是按时间顺序索引(或列出或绘制)的一系列数据点。最常见的是,一个时间序列是在连续的等距的时间点上采取的序列。

Pandas提供了两个非常有用的函数,我们可以用它们来分组我们的数据。

  • resample()-这个函数主要用于时间序列数据。它是一个方便的方法,用于时间序列的频率转换和重新取样。 对象必须有一个类似日期的索引(DatetimeIndex、PeriodIndex或TimedeltaIndex),或者将类似日期的值传递给on或level关键字。重新取样在实际数据的基础上产生一个独特的取样分布。

语法 :

DataFrame.resample(rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='start', kind=None, loffset=None, limit=None, base=0, on=None, level=None)
Python

参数 :

  • rule:代表目标转换的偏移字符串或对象
  • axis : int, optional, default 0
  • closed : {‘right’, ‘left’}
  • label : {‘right’, ‘left’}
  • convention :仅对PeriodIndex而言,控制是否使用规则的开始或结束。
  • loffset : 调整重新采样的时间标签
  • base:对于均匀划分为1天的频率,聚集的时间间隔的 “原点”。例如,对于 “5分钟 “的频率,基数可以从0到4。默认为0。
  • on : _对于一个DataFrame,要使用列来代替索引进行重采样。列必须是类似于数据时间的。
  • level : _对于一个MultiIndex,用于重采样的级别(名称或数字)。水平必须是类似日期的。

例子:每月增加的数量,每年增加的总金额。

  • 分组 – 分组允许用户指定要在什么基础上分析数据。

语法:

dataframe.groupby(pd.Grouper(key, level, freq, axis, sort, label, convention, base, Ioffset, origin, offset))
Python

参数:

  • key:选择要分组的目标列
  • level:目标索引的级别
  • freq:如果目标列是一个类似日期的对象,则按指定频率分组
  • axis:轴的名称或数量
  • sort:启用排序功能
  • label:用于标记的区间边界,只在传递freq参数时有效。
  • convention:如果分组是PeriodIndex并且传递了freq参数。
  • base:只在传递freq参数时有效。
  • Ioffset:只在传递freq参数时起作用
  • origin:时间戳,在此基础上调整分组。
  • offset:在原点上增加的偏移时间点

步骤

  • Import module
  • 加载或创建数据
  • 根据需要对数据重新取样
  • 对数据进行分组

下面给出了使用这种方法的实现情况。

程序 :使用重采样进行汇总

import numpy as np
import pandas as pd
  
# loading dataset
data = pd.read_csv('path of dataset')
  
# setting the index for the data
data = data.set_index(['created_at'])
  
# converting index to datetime index
data.index = pd.to_datetime(data.index)
  
# Changing start time for each hour, by default start time is at 0th minute
data.resample('W',  loffset='30Min30s').price.sum().head(2)
data.resample('W', loffset='30Min30s').price.sum().head(2)
  
# we can also aggregate it will show quantity added in each week
# as well as the total amount added in each week
data.resample('W', loffset='30Min30s').agg(
    {'price': 'sum', 'quantity': 'sum'}).head(5)
Python

输出:

如何在Python Pandas中按时间间隔对数据进行分组?

程序:根据不同的时间间隔对数据进行分组

在第一部分,我们像重新取样那样分组(以天、月等为基础),然后以一个月内的商店类型为基础对数据进行分组,然后像重新取样那样进行汇总。

import numpy as np
  
import pandas as pd
  
# loading dataset
  
data = pd.read_csv(r'path of dataset')
# setting the index for the data
data = data.set_index(['created_at'])
# converting index to datetime index
data.index = pd.to_datetime(data.index)
  
# Changing start time for each hour, by default start time is at 0th minute
data.resample('W',  loffset='30Min30s').price.sum().head(2)
data.resample('W', loffset='30Min30s').price.sum().head(2)
  
data.groupby([pd.Grouper(freq='M'), 'store_type']).agg(total_quantity=('quantity', 'sum'),
                                                       total_amount=('price', 'sum')).head(5)
Python

输出:

如何在Python Pandas中按时间间隔对数据进行分组?

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册