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
2、示例
# 使用 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
.dt
是 pandas
中的一个属性,用于访问包含日期和时间信息的 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_level
和col_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
:指定插值方法,可选值包括None
、ffill
(或pad
)和bfill
(或backfill
),用于处理缺失值。fill_value
:指定用于填充缺失值的特定值。- 其他参数如
level
和tolerance
用于多级索引的情况。
评论列表,共 0 条评论
暂无评论