PYTHON的一维转二维

需求

实践中,很多数据是一维的,比如按客户编号构建的一张分地区、分阶段违约次数表。一维数组:
PYTHON的一维转二维_第1张图片
现在需要将其转换为二维矩阵,各地区、各阶段的客户违约次数之和。既做了一维转二维的工作,也做了分类汇总的工作。二维数组:
PYTHON的一维转二维_第2张图片
这类的业务需求很多,在实践中经常需要。在EXCEL中,是通过数据透视功能实现的。那么在大数据处理过程中,通过PYTHON怎么实现?PYTHON有一个专门的命令,pivot_table。今天就介绍pivot_table,重点说明怎么处理复合表头问题。

方式一:只是pivot_table

先创建数据:

#创建数据
import pandas as pd
import numpy as np
df = pd.DataFrame({'客户编号': ['001','002', '003','004','005', '006','007','008', '009','010','011', '012'],
                   '所在地区': ['福州','福州', '福州','福州','福州', '福州','泉州','泉州','泉州', '厦门', '厦门', '厦门'],
                   '所处阶段': ['阶段一', '阶段二', '阶段三','阶段二', '阶段三','阶段一', '阶段一','阶段二', '阶段三' ,'阶段一','阶段二','阶段三'],
                   '违约次数':[2,6,11,6,12,3,4,3,2,9,5,6]
                  })
df

以’所在地区’为行,即index;以所处阶段为列,即columns。以’违约次数’为表格数据,即values。数据加工方式求和,即sum。

#pivot_table
df_1=pd.pivot_table(df,index=['所在地区'],columns='所处阶段',values=['违约次数' ],aggfunc=np.sum)
df_1

结果是这样的:
PYTHON的一维转二维_第3张图片
其结果是两层标题表,复合表头,是无法后续加工处理的,如筛选等。

PYTHON的一维转二维_第4张图片
PYTHON的一维转二维_第5张图片

方式二:pivot_table+reset_index

代码如下:


df_1=pd.pivot_table(df,index=['所在地区'],columns='所处阶段',values=['违约次数' ],aggfunc=np.sum)
df_1.reset_index(inplace=True)
df_1

结果是这样的:
PYTHON的一维转二维_第6张图片
其结果仍然是两层标题表,复合表头,是无法后续加工处理的,如筛选等。

方式三:pivot_table+reset_index+list(unique)

两层标题表,本质上我们没有告诉程序,究竟要以什么作为标题;或者说,从列表的角度,本来就应该是两层标题,一级标题是“所处阶段”,二级标题是“阶段一”、“阶段二”、“阶段三”。只是我们希望删除一级标题,只要二级标题,从而便于后续处理。那我们就得告诉程序,用“阶段一”、“阶段二”、“阶段三”作为标题,使用list(unique)命令组合。
代码如下:


df_1=pd.pivot_table(df,index=['所在地区'],columns='所处阶段',values=['违约次数' ],aggfunc=np.sum)
val=list(df['所处阶段'].unique())
df_1.columns=pd.Series(val)
df_1.reset_index(inplace=True)
df_1

PYTHON的一维转二维_第7张图片
似乎是我们需要的。但要告诉大家的是,结果是错误的,厦门的阶段三应该是6,而不是5。为什么?

方式四:pivot_table+reset_index+sorted(list(unique))

为什么上面的方式三是错误的,是因为代码并不是按照“阶段一”、“阶段二”、“阶段三”排列、排序的。那就统一排序吧,使用sorted(list(unique))命令组合。

代码如下:

df_1=pd.pivot_table(df,index=['所在地区'],columns='所处阶段',values=['违约次数' ],aggfunc=np.sum)
val=sorted(list(df['所处阶段'].unique()))
df_1.columns=pd.Series(val)
df_1.reset_index(inplace=True)
df_1

结果如下:
PYTHON的一维转二维_第8张图片
到此,符合我们的要求。
更多内容,请关注微信公众号“风控学习笔记”。

你可能感兴趣的:(python,pandas,数据分析)