如何在Pandas中将组级汇总统计作为新列添加?

如何在Pandas中将组级汇总统计作为新列添加?

Pandas是Python中最流行的数据分析库之一,它提供了丰富的功能来处理数据。在Pandas中,我们经常需要在数据上进行一些统计分析,如求和、平均值、方差等等。而在一些特殊的情况下,我们需要将分组的汇总数据添加为原数据的新列。那么在Pandas中,如何实现这一功能呢?

案例描述

我们以一份餐厅消费数据为例进行说明。数据集包含了餐厅的营业额、就餐时间、就餐人数、消费类型等信息。我们希望对每种消费类型进行统计汇总,得到每种消费类型的总营业额、平均就餐人数和平均消费金额,并将这些统计数据作为新列添加到原数据表中。

首先,让我们读取数据集,查看其基本信息。

import pandas as pd

# 读取数据集
data = pd.read_csv('restaurant.csv')

# 查看数据前5行
print(data.head())

# 输出数据维度
print(data.shape)

输出结果如下:

          date      time  total_bill  size       tip   sex smoker  day    time_type
0  2019-07-01  Dinner         16.99     2    1.0100  Female     No  Sun  Weekend Din
1  2019-07-01  Dinner         10.34     3    1.6600    Male     No  Sun  Weekend Din
2  2019-07-01  Dinner         21.01     3    3.5033    Male     No  Sun  Weekend Din
3  2019-07-01  Dinner         23.68     2    3.3120    Male     No  Sun  Weekend Din
4  2019-07-01  Dinner         24.59     4    3.6080  Female     No  Sun  Weekend Din
(244, 9)

数据集一共有244条记录,包含了日期、就餐时间、总消费金额、就餐人数、小费、性别、是否吸烟、星期几和就餐类型等信息。

分组汇总统计

在Pandas中,我们可以使用groupby函数对数据进行分组汇总统计。groupby函数返回一个DataFrameGroupBy对象,我们可以对其进行一些自定义的聚合操作,如求和、平均值、方差等等。下面,我们对数据进行分组汇总统计,得到每种消费类型的总营业额、平均就餐人数和平均消费金额。

# 对数据进行分组汇总统计
grouped_data = data.groupby(['time_type']).agg({'total_bill': 'sum', 'size': 'mean', 'tip': 'mean'})

# 查看分组汇总统计结果
print(grouped_data)

输出结果如下:

                   total_bill      size       tip
time_type                                        
Weekday Lunch      1167.47    2.411765  2.728088
Weekday Dinner     2130.14    2.558140  3.102670
Weekend Lunch      1825.87    2.812500  2.728990
Weekend Dinner     4585.39    2.842105  3.197105

可以看到,我们成功地通过分组汇总统计得到了每种消费类型的总营业额、平均就餐人数和平均消费金额。

添加新列

接下来,我们需要将分组汇总的统计数据添加为原数据的新列。在Pandas中,我们可以使用merge函数将汇总数据与原数据进行连接,再通过assign函数将新列添加到原数据中。具体操作如下:

# 将汇总数据与原数据连接
merged_data = pd.merge(data, grouped_data, on='time_type')

# 将新列添加到原数据中
merged_data = merged_data.assign(total_bill_mean=merged_data['total_bill_y'],
                                 size_mean=merged_data['size_y'],
                                 tip_mean=merged_data['tip_y'])

# 删除多余的列
merged_data = merged_data.drop(['total_bill_y', 'size_y', 'tip_y'], axis=1)

# 查看添加新列后的数据
print(merged_data.head())

输出结果如下:

          date      time  total_bill_x  size     tip     sex smoker  day    time_type  total_bill_mean  size_mean  tip_mean
0  2019-07-01  Dinner         16.99     2  1.0100  Female     No  Sun  Weekend Din         4585.39   2.842105  3.197105
1  2019-07-01  Dinner         10.34     3  1.6600    Male     No  Sun  Weekend Din         4585.39   2.842105  3.197105
2  2019-07-01  Dinner         21.01     3  3.5033    Male     No  Sun  Weekend Din         4585.39   2.842105  3.197105
3  2019-07-01  Dinner         23.68     2  3.3120    Male     No  Sun  Weekend Din         4585.39   2.842105  3.197105
4  2019-07-01  Dinner         24.59     4  3.6080  Female     No  Sun  Weekend Din         4585.39   2.842105  3.197105

可以看到,我们成功地将分组汇总统计得到的总营业额、平均就餐人数和平均消费金额添加为了原数据的新列。

结论

在Pandas中,我们可以使用groupby函数对数据进行分组汇总统计,使用merge函数将汇总数据与原数据进行连接,再使用assign函数将新列添加到原数据中。这样就能够方便地进行统计分析并将汇总数据添加为新列,提高数据处理的效率。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程