图片摄于2015年6月13日于北京百花山我们首先构建一个DataFrame数据。字段定义如下:
applied_from:申请渠道
applied_type:申请类型
refused_id:拒绝原因代码
import pandas as pd
import warnings
warnings.filterwarnings("ignore")
df = pd.DataFrame({'applied_from': [1,1,1,1,1,2,2,2,2,2,2],
'applied_type': [0,0,0,1,1,0,0,0,1,1,1],
'refused_id': [100,100,100,102,102,102,102,102,102,102,100]})
df
我们所需要求的是什么呢?求三列数据。
求第一列数据id_cnt:不同申请渠道applied_from不同申请类型applied_type 不同拒绝原因refused_id总数
#不同申请渠道不同申请类型不同拒绝原因总数
df_new = df.groupby(by=['applied_from','applied_type','refused_id'])['refused_id'].agg({'id_cnt':'count'}).reset_index()
df_new
求第二列数据id_all:不同申请渠道applied_from不同申请类型applied_type总数
#不同渠道不同产品类型的个数
df_new_tmp = df_new.groupby(by=['applied_from','applied_type'])['id_cnt'].agg({'id_all':'sum'}).reset_index()
df_new_tmp
注意哦,id_all 只是一个中间变量 ,它是帮我们求id_per。
求第三列数据id_per:不同申请渠道applied_from不同申请类型applied_type不同拒绝原因refused_id总数作为分子(id_cnt),不同申请渠道不同申请类型总数作为分母(id_all)
首先,我们合并数据集。
df_new = pd.merge(df_new, df_new_tmp, on=['applied_from', 'applied_type'])
df_new
然后我们开始计算求第三列数据id_per
df_new
我们用了apply和lambda函数去计算。
pandas是很灵活的,结合python的基础语法去运用,多结合实际需求去使用pandas的各个方法,慢慢你就熟悉熟练了!关键是多结合实际去运用。
图片摄于2015年6月13日于北京百花山