Pandas 是一个强大的 Python 数据分析库,提供了大量的数据结构和数据分析工具。其中,groupby
方法是 Pandas 中用于数据分组的核心功能。通过 groupby
,你可以根据一个或多个列的值将数据分割成不同的组,然后对每个组进行聚合操作(如求和、平均值、计数等)。
Pandas 的 groupby
可以分为以下几种类型:
假设我们有一个包含销售数据的 DataFrame,如下所示:
import pandas as pd
data = {
'date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02'],
'product': ['A', 'B', 'A', 'B'],
'sales': [100, 200, 150, 250]
}
df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date'])
我们可以使用 groupby
方法按日期和产品进行分组,并计算每组的总销售额:
# 按日期和产品分组,并计算总销售额
result = df.groupby(['date', 'product'])['sales'].sum().reset_index()
print(result)
输出结果:
date product sales
0 2023-01-01 A 100
1 2023-01-01 B 200
2 2023-01-02 A 150
3 2023-01-02 B 250
原因:处理大规模数据集时,分组后的数据量可能会非常大,导致内存不足。
解决方法:
chunksize
参数分块读取数据,逐块进行分组和聚合操作。astype
方法将数据类型转换为更节省内存的类型,如将整数类型从 int64
转换为 int32
。# 示例:分块处理数据
chunksize = 100000
chunks = pd.read_csv('large_data.csv', chunksize=chunksize)
result = pd.DataFrame()
for chunk in chunks:
grouped_chunk = chunk.groupby(['date', 'product'])['sales'].sum()
result = result.add(grouped_chunk, fill_value=0)
result = result.reset_index()
print(result)
原因:数据中可能存在缺失值,导致分组键不一致。
解决方法:
fillna
方法填充缺失值。dropna
方法删除包含缺失值的行。# 示例:填充缺失值
df['product'] = df['product'].fillna('Unknown')
result = df.groupby(['date', 'product'])['sales'].sum().reset_index()
print(result)
领取专属 10元无门槛券
手把手带您无忧上云