Pandas解决一个电商需求
本文基于一份模拟的电商数据,讲解Pandas几个常用函数的使用技巧。
数据介绍
模拟的一份数据,有6个字段信息:
- 订单号:每个订单号可能存在多条记录,最终会有通过或者未通过的判断
- 每个订单存在跟单员和审核员的操作以及对应的时间
- 审核员会对判断每个记录是否通过
需求
找出所有最终状态为通过的订单的【最早跟单员与对应时间】和【最晚审核员与对应时间】
比如订单S03,对应的数据应该为:
再比如S04订单:两个状态都是未通过,不在最终的结果里面
下面介绍下如何通过Pandas的函数来实现,主要用到的函数:
- read_excel:读取文件
- isin:成员判断
- sort_values:排序
- drop_duplicates:去重
- merge:合并
步骤1:读取数据
数据的排列是无序的,直接读取进来:
步骤1:确定哪些订单最终“通过”审核
In [3]:
1 | df1 = df[df["审核状态"] == "通过"] |
确定通过的订单:
In [4]:
1 | pass_orders = df1["订单号"].tolist() |
Out[4]:
1 | ['S02', 'S03', 'S01', 'S06'] |
步骤2:取出通过订单的全部信息
In [5]:
1 | df2 = df[df["订单号"].isin(pass_orders)] |
步骤3:对每个订单基于【审核时间】升序排列
In [6]:
1 | df3 = df2.sort_values(["订单号","审核时间"], |
在这里我们可以确定最终想要的数据:每个订单的所需信息
步骤4:取出最早跟单时间记录
In [7]:
1 | df4 = df3.drop_duplicates(subset=["订单号"], keep="first")[["订单号","跟单员","跟单时间"]] |
Out[7]:
步骤5:取出最晚审核时间记录
In [8]:
1 | df5 = df3.drop_duplicates(subset=["订单号"], keep="last")[["订单号","审核员","审核时间"]] |
Out[8]:
步骤6:数据合并
In [9]:
1 | df6 = pd.merge(df4,df5) # 数据合并 |
Out[9]: