Crossin的编程教室

pandas行列转换的3种操作

入门教程、案例源码、学习资料、读者群

请访问: python666.cn

大家好,欢迎来到 Crossin的编程教室 !
分享三个行列转换的相关问题,用pandas来解决,大家可以来检验一下自己pandas是否学得过关Image

一、行转列:分组筛选拼接

问题(群成员"哎哟喂是豆子")

想要实现按名称分组,并将分组内的列向数据转为横向数据,字段按照分组内行排序顺序依次给定(如下图状态->状态1,状态2,状态3,状态4)。

Image

解决方法

用法:groupby,concat

这里使用分组内聚合函数nth(n),可以提取组内的第n行数据。因此可以按行顺序依次提取出来,然后再横向拼接起来即为最后想要的结果。

num = df[df['名称']=='糖葫芦'].shape[0]

grp_list = [df.groupby('名称')[['状态','编号']].nth(n).reset_index(drop=True) \
            .rename(columns={'状态':'状态{}'.format(n+1),'编号':'编号{}'.format(n+1)}) \
            for n in range(0,num)]
pd.concat(grp_list,axis=1)

二、列转行:字符拼接爆炸

问题(群成员"最会烤地瓜")

现在想要将以上得到的结果再还原回去,如何操作呢?

Image

解决方法

用法:explode,concat,str.cat,str.split

列转行可以借助explode爆炸方法来解决。

但此时的数据已经是横向分散在各列上比如状态有4个字段,并不是explode可以接受的列表形式。因此我们这里需借助字符串拼接str.cat()的方法构造出两个辅助列,然后用split分割成列表,最后将explode的结果拼接起来即可还原。

df1['状态']=df1['状态1'].str.cat([df1['状态2'],df1['状态3'],df1['状态4']], sep=',')
df1['编号']=df1['编号1'].str.cat([df1['编号2'],df1['编号3'],df1['编号4']], sep=',')
pd.concat([df1['状态'].str.split(',').explode(),
           df1['编号'].str.split(',').explode()],axis=1)

三、列转行:轴旋转+正则提取

问题(群成员"耿楠"):

请问如何能高效只提取数字到相应的工作表中?

Image

解决方法

用法:from_product,stack,str.extract,droplevel,sort_values,reset_index

因为原数据有二级列索引,因此考虑用stack将列索引转为行索引,即实现逆透视。

然后使用正则表达式将数据中的数字提取出来,再进行排序调整。

df=pd.read_excel('./pandas进阶题库数据/数据形式变换-4星-3.xlsx',header=1,index_col=0)

# 重新制定二级columns列索引
name = ['张芹', '杨涵', '李雪']
month = ['1月','2月','3月','4月']
mindex = pd.MultiIndex.from_product([name,month], names=['姓名',None])
df.columns = mindex

# 列columns转旋转成行index
df1 = df.stack(level=0)
df1 = df1.astype(str)

# 用str.extract正则提取括号内数字,也可以使用re正则模型
for col in df1.columns:
    df1[col] = df1[col].str.extract(pat='\(([0-9]{1,}(?:\.[0-9]+)?)\)')

    # 剔除无用索引,重新排序
df1.index = df1.index.droplevel(level=0)
df1.reset_index().sort_values(by='姓名',ascending=True).reset_index(drop=True)

Image

作者:东哥起飞

来源:Python数据科学

Crossin的第2本书《码上行动:利用Python与ChatGPT高效搞定Excel数据分析》已经上市了。
点此查看上一本《码上行动:零基础学会Python编程》介绍

Image

本书从 Python 和 Excel 结合使用的角度讲解处理分析数据的思路、方法与实战应用。不论是希望从事数据分析岗位的学习者,还是其他职业的办公人员,都可以通过本书的学习掌握 Python 分析数据的技能。书中创新性地将 ChatGPT 引入到教学当中,用 ChatGPT 答疑并提供实训代码,并介绍了使用 ChatGPT 辅助学习的一些实用技巧,给学习者带来全新的学习方式。

当当网5折活动进行中

读者朋友们购买后可在后台联系我,加入读者交流群,Crossin会为你开启陪读模式,解答你在阅读本书时的一切疑问。

感谢转发和点赞的各位~

_往期文章推荐_

Python复刻游戏《贪吃蛇大作战》
在pandas中使用数据透视表

【教程】: python

【答疑】: 666