python数据分析&办公自动化实战(五):索引操作&通过行列转换实现降维

本篇为python数据分析实战笔记的第五篇,主要内容是通过行列转换实现表格降维,以**“代码+注释+总结”**的形式进行展示。

任务目标:将一份列为时间,行为经营指标的表进行行列转换(数据库增加列难度比增加行难度要高)
原表:

经营指标日期1日期2
指标1ab
指标2cd
指标3ef

预期结果:

经营指标指标1指标2指标3
时间1ace
时间2bdf

主要内容:通过索引分组、stack()、unstack()实现行列转换

#读入数据并重命名列
df = pd.read_csv(doc,encoding="gbk")
df.rename(columns={"一级分类按服务类型":"产品类型","业务指标":"经营指标"},inplace=True)

#选取所需的数据
df[["经营指标","产品类型","产品一级分类","产品二级分类"]] = df[["经营指标","产品类型","产品一级分类","产品二级分类"]].astype(str)
df = df.loc[~df["经营指标"].str.contains("单|件数|体积|重量|市场费用|管理费用|研发费用")]

#通过对列进行切片实现分割时间项和其他项
list = [column for column in df]
list9 = list[9:]
#从列索引9到最后为时间列`在这里插入代码片`
list8 = list[0:9]
#从索引0到8(不包含9)是其他项

#索引操作
df2 = df.set_index(list8)
#将前8列设置为索引,列上就只剩下时间列了
df2 = pd.DataFrame(df2,columns=pd.Index(list9,name="日期"))
#将时间列的标题名做成一个组,命名为“日期”
df3 = df2.stack().unstack(1).sort_index(by=["区域","日期","件型","产品类型","经分一级分类","经分二级分类"],ascending=[1,1,1,1,1,1]).reset_index()
#stack()可以将列变为行,unstcak(1)将序号为1的行索引变为列。由于变动之后索引顺序比较乱,需要重排索引
#.sort_values(by=[],ascending=[])可以实现对值的重新排序,by表示根据……进行排序,ascending为是否顺序排列。
df3 = df3[~df3["日期"].isin(["Q","H","FY"])]
#去掉不规整的日期类型,如季度/半年度/年度累计等
df3.to_excel("3.xlsx",encoding="gbk")

关于python索引操作详见《python数据分析:第八章》
部分索引操作如下:

查看索引:df.index
设置层次索引的例子:
data = pd.Series(np.random.randn(9),
	……: index=[['a', 'a', 'a', 'b', 'b', 'c', 'c', 'd', 'd'],
	……:		[1, 2, 3, 1, 3, 1, 2, 2, 3]])
可以通过选取索引来选取数据: df["b":"c"]
同时选取行列索引:df.loc[:,2]
对行列索引命名:df.index.names = [];	df.columns.names = []
可以通过索引进行统计:df.sum(level="color",axis=1行方向)
设置索引:df.set_index(["c","d"])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值