如何在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函数将新列添加到原数据中。这样就能够方便地进行统计分析并将汇总数据添加为新列,提高数据处理的效率。
极客笔记