添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

1、groupby

groupby 是 pandas 中的一个功能强大的方法,用于数据分组和分组操作。它允许您根据一个或多个列的值将数据帧(DataFrame)拆分为多个组,并对每个组执行聚合、统计或其他操作。

groupby 方法的一般语法如下:

DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False)

其中,一些常用参数包括:

  • by:指定要分组的列名,可以是单个列名的字符串,多个列名的列表,或者一个函数,用于计算分组键。
  • axis:默认为 0,表示按行分组;1 表示按列分组。
  • as_index:默认为 True,如果为 True,则分组键将成为结果数据帧的索引;如果为 False,则分组键不会成为索引,而会保留为列。
  • sort:默认为 True,表示是否对分组键进行排序。
  • observed:默认为 False,如果为 True,则可以处理不在列中的观察值,适用于分类数据。

    import pandas as pd

    data = {'Category': ['A', 'B', 'A', 'B', 'A'], 'Value': [10, 15, 20, 25, 30]} df = pd.DataFrame(data)

    根据 'Category' 列进行分组,并计算每个组的平均值

    grouped = df.groupby('Category') result = grouped.mean()

    Category Value
    A 20.0 B 20.0

    或者一次性使用聚合函数

    result = df.groupby('Category').mean()

    Category Value
    A 20.0 B 20.0

    # 使用 groupby 和 size 统计每个小时段的次数
    hourly_counts = df.groupby(df['start_time'].dt.hour).size().reset_index(name='count')
    # 创建一个包含所需时间范围的列表
    time_range = list(range(24))
    hourly_counts = hourly_counts.set_index('start_time')
    hourly_counts = hourly_counts.reindex(time_range)
    hourly_counts = hourly_counts.reset_index()
    
  • df.groupby(df['start_time'].dt.hour): 这一部分首先使用 groupby 方法按照时间戳的小时部分对数据框进行分组。df['start_time'].dt.hour 是一个 Series,它提取了时间戳中的小时信息。这将导致数据框被拆分为多个子组,每个子组包含相同小时的数据点。
  • .size(): 这是对分组后的数据进行汇总操作,计算每个小时分组中的元素数量,也就是每小时的数据点数量。
  • .reset_index(name='count'): 这一部分用于重置索引并为结果分配列名。它将重新设置索引,以将之前的小时信息转为一列,并将该列命名为 'count',以表示每小时的数据点数量。
  • hourly_counts = hourly_counts.set_index('start_time'): 这句代码将 hourly_counts 数据框的索引设置为 'start_time' 列的值。
  • hourly_counts = hourly_counts.reindex(time_range): 这句代码使用 reindex 方法重新索引 hourly_counts 数据框,其中 time_range 是一个时间范围(时间索引)的索引。
  • hourly_counts = hourly_counts.reset_index(): 这句代码将数据框的索引重新设置为默认整数索引,同时将 'start_time' 列重新变为普通的列。这可以帮助将数据框恢复到标准的表格格式,以便进一步处理或分析数据。
  • 2.1 .dt

    .dtpandas 中的一个属性,用于访问包含日期和时间信息的 Series 对象的 datetime 访问器。这允许您从日期时间数据中提取不同的部分,例如年、月、日、小时、分钟、秒等。

    通常,您可以将 .dt 属性用于 Series 对象,该对象包含日期时间数据,例如时间戳列。以下是一些常见的用法:

    访问日期部分:

    df['start_time'].dt.date

    这将返回一个包含时间戳列中的日期部分的新 Series

    访问小时部分:

    df['start_time'].dt.hour

    这将返回一个包含时间戳列中的小时部分的新 Series

    访问分钟部分:

    df['start_time'].dt.minute

    这将返回一个包含时间戳列中的分钟部分的新 Series

    访问秒部分:

    df['start_time'].dt.second

    这将返回一个包含时间戳列中的秒部分的新 Series

    .dt 属性非常有用,因为它允许您以非常方便的方式处理日期时间数据,提取所需的信息或执行日期时间操作。

    2.2 reset_index

    reset_index 是 pandas 中用于重新设置数据帧(DataFrame)索引的方法。它将当前的索引列恢复为默认的整数索引,并将原来的索引列变成数据帧的一部分,成为新的列。

    reset_index 方法有一些可选的参数,用于控制重置索引的行为。其中最常用的参数包括:

  • drop:默认为 False。如果将其设置为 True,则会删除原索引列,而不将其作为新的数据列保留。
  • level:用于多级索引的情况,指定要重置的索引级别。
  • col_levelcol_fill:用于多级列索引的情况,可以指定新列的级别和填充值。

    import pandas as pd

    data = {'A': [1, 2, 3], 'B': [4, 5, 6]} df = pd.DataFrame(data) df.set_index('A', inplace=True) # 设置索引为 'A' 列 df = df.reset_index() # 重置索引,将 'A' 列变成数据列

    在这个示例中,我们首先将 'A' 列设置为索引,然后使用 reset_index 方法将它恢复为数据列。

    2.3 set_index

    set_index 是 pandas 中用于设置数据帧(DataFrame)的索引的方法。它允许您将数据帧中的一个或多个列设置为索引,从而更轻松地按照特定列进行数据检索和操作。

    # 将 'Name' 列设置为索引
    df.set_index('Name', inplace=True)
    

    inplace=True 参数表示在原始数据帧上进行更改,而不是创建一个新的数据帧。

    2.4 reindex

    reindex 是 pandas 中的一个方法,用于重新索引数据。它主要用于调整数据帧(DataFrame)或序列(Series)的索引,以便匹配新的索引标签。这对于处理缺失数据、调整数据顺序或与其他数据进行合并非常有用。

    reindex 方法的一般语法如下:

    pythonCopy code
    DataFrame.reindex(labels, axis=0, method=None, tolerance=None, level=None, fill_value=None)
    

    其中,一些常用参数包括:

  • labels:指定新索引的标签。可以是一个索引对象、索引标签列表或范围,用于定义新的行或列索引,取决于 axis 参数。
  • axis:默认为 0,表示在行索引上进行重新索引;1 表示在列索引上进行重新索引。
  • method:指定插值方法,可选值包括 Noneffill(或 pad)和 bfill(或 backfill),用于处理缺失值。
  • fill_value:指定用于填充缺失值的特定值。
  • 其他参数如 leveltolerance 用于多级索引的情况。
  •