代码实现
import pandas as pd
# 假设已经读取了DataFrame,命名为df
# 将日期列转换为datetime类型
df['日期'] = pd.to_datetime(df['日期'])
# 提取日期中的天
df['日期'] = df['日期'].dt.date
# 按'地区'和'日期'分组,统计每个产品类别的销售额总和
grouped_df = df.groupby(['地区', '日期', '产品类别'])['销售额'].sum().reset_index()
# 找出销售额总和最高的前三个地区 - 日期组合
top_3_groups = grouped_df.groupby(['地区', '日期'])['销售额'].sum().reset_index().nlargest(3, '销售额')[['地区', '日期']]
性能优化阐述
- 数据类型优化:在操作之前,确保所有列的数据类型是合适的,例如将日期列转换为
datetime
类型,数值列确保为数值类型,避免不必要的类型转换开销。对于类别型数据,如'地区'和'产品类别',可以使用astype('category')
将其转换为类别类型,这样在内存占用和计算效率上都有提升。
- 减少数据量:如果原始DataFrame有很多不需要的列,可以在操作之前删除,减少内存占用和计算量。
- 分块处理:由于DataFrame非常大,可以考虑分块读取数据,例如在读取文件时使用
chunksize
参数。在分块处理时,对每一块数据进行上述的分组统计操作,最后再合并结果。
- 使用高效的聚合函数:
groupby
操作时,使用内置的高效聚合函数,如sum
,避免使用自定义的复杂聚合函数,因为自定义函数的计算效率相对较低。
- 并行计算:可以使用
dask
等库进行并行计算,dask
能够处理比内存更大的数据,将DataFrame分块并行处理,加快整体计算速度。