Pandas GroupBy Unstack

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

通过以上的代码,我们成功将数据表转换为了以日期为列、城市为行、不同产品的销售情况为值的表格。

本文链接:http://task.lmcjl.com/news/17563.html

展开阅读全文