Pandas是一个数据处理的库,今天我们来学习groupby()这个函数的用法。
一.通过 pandas.groupby函数
import pandas as pd
data = pd.read_excel(r'分组汇总.xlsx')
print(data)
有如下数据 :
销售日期 时间段 销售员 天河店销量 番禺店销量 越秀店销量
0 2022-01-01 上午 小敏 118 200 167
1 2022-01-01 上午 李红 88 188 188
2 2022-01-01 上午 马姐 156 180 180
3 2022-01-01 下午 小敏 90 199 188
4 2022-01-01 下午 李红 109 189 198
5 2022-01-01 下午 马姐 88 179 170
6 2022-01-02 上午 小敏 157 190 190
7 2022-01-02 上午 李红 200 200 189
8 2022-01-02 上午 马姐 90 199 188
9 2022-01-02 下午 小敏 109 189 198
10 2022-01-02 下午 李红 88 179 170
11 2022-01-02 下午 马姐 180 190 179
需求:
需要看每一天每个销售员在三个店的销售情况(两个维度,三个指标,多列聚合)
import pandas as pd
data = pd.read_excel(r'分组汇总.xlsx')
print(data)
sum_df = data.groupby(by=['销售日期', '销售员'])['天河店销量', '番禺店销量', '越秀店销量'].sum()
print(sum_df)
-
# by=['销售日期', '销售员'] 意思是对列表里字段进行分组,然后通过['天河店销量', '番禺店销量', '越秀店销量']列表里字段进行求和汇总
-
# 返回Series类型对象。 ['销售日期', '销售员']会变成index
-
# ['天河店销量', '番禺店销量', '越秀店销量']则成为值
运行结果 :
这样就实现了,但往往还需要把index转换成列
使用 pandas.DataFrame.reset_index
函数作用:重置索引或其level。
重置数据帧的索引,并使用默认索引。如果数据帧具有多重索引,则此方法可以删除一个或多个level。
函数主要有以下几个参数:reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill='')
各个参数介绍:
level:可以是int, str, tuple, or list, default None等类型。作用是只从索引中删除给定级别。默认情况下删除所有级别。
drop:bool, default False。不要尝试在数据帧列中插入索引。这会将索引重置为默认的整数索引。
inplace:bool, default False。修改数据帧(不要创建新对象)。
col_level:int or str, default=0。如果列有多个级别,则确定将标签插入到哪个级别。默认情况下,它将插入到第一层。
col_fill:object, default。如果列有多个级别,则确定其他级别的命名方式。如果没有,则复制索引名称。
重置索引时,将旧索引添加为列,并使用新的顺序索引:
import pandas as pd
data = pd.read_excel(r'分组汇总.xlsx')
print(data)
sum_df = data.groupby(by=['销售日期', '销售员'])['天河店销量', '番禺店销量', '越秀店销量'].sum()
print(sum_df)
sum_df = sum_df.reset_index()
print(sum_df)
运行结果: