📅  最后修改于: 2023-12-03 15:34:20.163000             🧑  作者: Mango
DataFrame.groupby()
方法允许您根据一个或多个键(这可以是函数、数组或 dataframe 列)来分割 dataframe 并应用聚合函数。
在 pandas 中,groupby() 是一个核心函数,最常用于三个步骤:
DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False, **kwargs)
其中,参数如下:
如果 as_index=True
(默认值),则分组键将成为结果 dataframe 的索引。如果 as_index=False
,则分组键不会成为结果索引,而是用排名分配新的行索引。
假设我们有一个数据集,包含某个地区月份和该月销售额的信息。我们想要从中获取每个地区的销售总额。首先,我们可以将数据按照区域进行分组,然后对每个区域的销售额求和。
import pandas as pd
data = {
'Region': ['South', 'South', 'North', 'North', 'East', 'West', 'East', 'West'],
'Month': ['January', 'February', 'January', 'February', 'January', 'January', 'February', 'February'],
'Sales': [5000, 5500, 6000, 5900, 7000, 8000, 9000, 8500]
}
df = pd.DataFrame(data)
result = df.groupby(['Region']).sum()
print(result)
结果如下所示:
Sales
Region
East 16000
North 11900
South 10500
West 16500
在上面的代码中,我们使用了 groupby
函数将数据按照 Region
分组,然后将 Sales
列数据求和。
除了单个列以外,我们还可以按照多个列来分组数据。假设我们有一个数据集,包含某个商店每个月每个地区所销售的几种不同商品的数量。我们想按照商品类型,地区和月份来分组数据,并计算每个分组中不同商品的销售总数和平均数量。
import pandas as pd
data = {
'Region': ['South', 'South', 'North', 'North', 'East', 'West', 'East', 'West'],
'Month': ['January', 'February', 'January', 'February', 'January', 'January', 'February', 'February'],
'Product': ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'],
'Quantity': [100, 120, 130, 140, 110, 90, 80, 70]
}
df = pd.DataFrame(data)
result = df.groupby(['Region', 'Month', 'Product']).agg({'Quantity': ['sum', 'mean']})
print(result)
结果如下所示:
Quantity
sum mean
Region Month Product
East February A 80 80.0
B 70 70.0
January A 110 55.0
North February A 140 70.0
B 140 70.0
January A 130 65.0
B 140 70.0
South February B 120 120.0
January A 100 100.0
在上面的代码中,我们使用了 groupby
函数来按照 Region
、Month
和 Product
来分组数据。然后,我们使用了 agg
函数来计算不同商品的销售总数和平均数量。
分组后的数据可以进行多种可视化操作,例如画图。假设我们有一个数据集,其中包含某个城市每个月的气温和降雨量。现在我们想要绘制每个月的平均气温和降雨量(按季节区分)。
import pandas as pd
import matplotlib.pyplot as plt
data = {
'Month': ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
'Temperature': [17, 19, 22, 26, 30, 33, 33, 33, 31, 28, 23, 19],
'Rainfall': [9, 12, 20, 48, 143, 210, 263, 222, 160, 60, 18, 9],
}
df = pd.DataFrame(data)
df['Season'] = df['Month'].replace(
['January', 'February', 'December'], 'Winter'
).replace(
['March', 'April', 'May'], 'Spring'
).replace(
['June', 'July', 'August'], 'Summer'
).replace(
['September', 'October', 'November'], 'Autumn'
)
result = df.groupby('Season').mean()[['Temperature', 'Rainfall']]
result.plot(kind='bar')
plt.xlabel('Season')
plt.ylabel('Average Temperature (°C) / Rainfall (mm)')
plt.title('Seasonal Climate')
plt.show()
运行上述代码将生成以下柱状图:
在上面的代码中,我们使用了 groupby
函数来将数据按照 Season
分组,并计算每个组中的平均气温和降雨量。然后,我们使用了 plot
函数来绘制柱状图。