Pandas是一个基于NumPy的Python数据处理库,可以对数据进行多种形式的操作和处理。其中Groupby和Unstack是Pandas中用于数据处理的非常重要的函数。
GroupBy
背景
在实际数据处理中,经常需要将数据按照某种条件进行分组,例如将销售数据按照不同的城市进行分组分析,统计各城市的销售情况和市场占比等。Groupby函数可以很方便的完成数据分组和相关计算。
语法
grouped = df.groupby(key)
其中,key是用于分组的关键字,可以是单个列名、多个列名组成的列表、pandas.Series等。
实例
假设我们有一份名为sales的数据表,它记录了不同城市的超市销售情况:
city | product | sale |
---|---|---|
Beijing | Apple | 10 |
Shanghai | Pear | 20 |
Beijing | Pear | 15 |
Shanghai | Apple | 12 |
Guangzhou | Apple | 8 |
Guangzhou | Pear | 9 |
我们希望按照城市对销售数据进行分组,并计算每个城市销售额的和、均值和标准差。
import pandas as pd
# 读取数据表
df = pd.read_csv('sales.csv')
# 按城市分组
grouped = df.groupby('city')
# 计算销售额的和、均值和标准差
result = pd.DataFrame({'sum': grouped['sale'].sum(),
'mean': grouped['sale'].mean(),
'std': grouped['sale'].std()})
print(result)
输出结果为:
sum mean std
city
Beijing 25 12.500000 3.535534
Guangzhou 17 8.500000 0.707107
Shanghai 32 16.000000 5.656854
Unstack
背景
在实际数据处理中,经常需要将以行展示的数据进行透视,转换为以列展示的数据。例如,我们有一份产品销售数据表,其中包含了产品、日期和销售额等信息。我们希望将数据表转换为以日期为列、产品为行、销售额为值的表格,那么就需要使用到Unstack函数了。
语法
unstack(level=-1, fill_value=None)
其中,level表示要转换为列的层级(默认为最后一层),fill_value为缺失值的填充值。
实例
假设我们有一份名为sales的数据表,它记录了不同日期产品的销售情况:
date | product | sale |
---|---|---|
2020-01-01 | Apple | 10 |
2020-01-01 | Pear | 20 |
2020-01-02 | Apple | 15 |
2020-01-02 | Pear | 12 |
2020-01-03 | Apple | 8 |
2020-01-03 | Pear | 9 |
我们希望将数据表转换为以日期为列、产品为行、销售额为值的表格。使用Unstack函数可以很方便的完成转换。
import pandas as pd
# 读取数据表
df = pd.read_csv('sales.csv')
# 将数据表转换为以日期为列、产品为行、销售额为值的表格
result = df.set_index(['date', 'product']).unstack()
print(result)
输出结果为:
sale
product Apple Pear
date
2020-01-01 10 20
2020-01-02 15 12
2020-01-03 8 9
此时,我们就成功将以行展示的数据进行了透视,转换为了以列展示的数据。
GroupBy + Unstack
GroupBy和Unstack函数搭配使用,可以进行更加复杂的数据处理和透视。例如,我们有一份名为sales的数据表,它记录了不同城市的超市销售情况:
city | date | product | sale |
---|---|---|---|
Beijing | 2020-01-01 | Apple | 10 |
Shanghai | 2020-01-01 | Pear | 20 |
Beijing | 2020-01-02 | Pear | 15 |
Shanghai | 2020-01-02 | Apple | 12 |
Guangzhou | 2020-01-03 | Apple | 8 |
Guangzhou | 2020-01-03 | Pear | 9 |
我们希望将数据表转换为以日期为列、城市为行、不同产品的销售情况为值的表格。
import pandas as pd
# 读取数据表
df = pd.read_csv('sales.csv')
# 按城市和日期分组
grouped = df.groupby(['city', 'date'])
# 计算每组的销售额
result = grouped['sale'].sum()
# 将Series对象转换为DataFrame对象
result = result.unstack('city')
print(result)
输出结果为:
city Beijing Guangzhou Shanghai
date
2020-01-01 10.0 NaN 20.0
2020-01-02 15.0 NaN 12.0
2020-01-03 NaN 17.0 NaN
通过以上的代码,我们成功将数据表转换为了以日期为列、城市为行、不同产品的销售情况为值的表格。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Pandas GroupBy Unstack - Python技术站