Python pandas 列转行操作详解(类似hive中explode方法)
作者:geekingLi 发布时间:2021-02-18 15:12:31
标签:Python,pandas,列转行,hive,explode
最近在工作上用到Python的pandas库来处理excel文件,遇到列转行的问题。找了一番资料后成功了,记录一下。
1. 如果需要 * 的只有一列:
df=pd.DataFrame({'A':[1,2],'B':[[1,2],[1,2]]})
df
Out[1]:
A B
0 1 [1, 2]
1 2 [1, 2]
如果要 * B这一列,可以直接用explode方法(前提是你的pandas的版本要高于或等于0.25)
df.explode('B')
A B
0 1 1
1 1 2
2 2 1
3 2 2
2. 如果需要 * 的有2列及以上
df=pd.DataFrame({'A':[1,2],'B':[[1,2],[3,4]],'C':[[1,2],[3,4]]})
df
Out[592]:
A B C
0 1 [1, 2] [1, 2]
1 2 [3, 4] [3, 4]
则可以用写一个方法,如下代码:
def unnesting(df, explode):
idx = df.index.repeat(df[explode[0]].str.len())
df1 = pd.concat([
pd.DataFrame({x: np.concatenate(df[x].values)}) for x in explode], axis=1)
df1.index = idx
return df1.join(df.drop(explode, 1), how='left')
unnesting(df,['B','C'])
Out[2]:
B C A
0 1 1 1
0 2 2 1
1 3 3 2
1 4 4 2
补充知识:pandas:一列分解成多列 series.str.split(',',expand=True);pyspark 一列分解成多列
源shuju
question_id id
0 17576 70391,70394
1 17576 70391,70392,70393,70394
2 17576 70391,70392
3 40430 155032,155033,155034
4 40430 155032,155033,155034,155035
5 40430 155033,155034,155035
6 40430 155032,155035
7 40430 155034,155035
8 40430 155032,155034
9 40430 155032,155034,155035
10 40430 155033,155034
11 40430 155032,155033
12 40430 155033,155035
13 40430 155032,155033,155035
pandas solution
df.join(df['id'].str.split(',',expand=True)
result
0 1 2 3
0 70391 70394 None None
1 70391 70392 70393 70394
2 70391 70392 None None
3 155032 155033 155034 None
4 155032 155033 155034 155035
5 155033 155034 155035 None
6 155032 155035 None None
7 155034 155035 None None
8 155032 155034 None None
9 155032 155034 155035 None
10 155033 155034 None None
11 155032 155033 None None
12 155033 155035 None None
13 155032 155033 155035 None
#注意expand=True
df.join(df['id'].str.split(',',expand=True))
question_id id 0 1 2 3
0 17576 70391,70394 70391 70394 None None
1 17576 70391,70392,70393,70394 70391 70392 70393 70394
2 17576 70391,70392 70391 70392 None None
3 40430 155032,155033,155034 155032 155033 155034 None
4 40430 155032,155033,155034,155035 155032 155033 155034 155035
5 40430 155033,155034,155035 155033 155034 155035 None
6 40430 155032,155035 155032 155035 None None
7 40430 155034,155035 155034 155035 None None
8 40430 155032,155034 155032 155034 None None
9 40430 155032,155034,155035 155032 155034 155035 None
10 40430 155033,155034 155033 155034 None None
11 40430 155032,155033 155032 155033 None None
12 40430 155033,155035 155033 155035 None None
13 40430 155032,155033,155035 155032 155033 155035 None
pyspark solution
tdf=df.select(F.split(df.id,',').alias('ss'),'question_id','count_num')
tdf.sort('question_id').show()
res=tdf.select(F.explode(tdf.ss).alias('new'),'question_id','count_num')
res.sort('question_id').show()
res.groupBy('question_id','new').sum().sort('question_id').show()
result
来源:https://blog.csdn.net/m0_37773338/article/details/103754807


猜你喜欢
- 一般来说,我们会将自己写的Python模块与python自带的模块分开存放以达到便于维护的目的。那么如何在Python中添加自定义的模块呢?
- 处理中文在进行写文件时,必须采用以下方式:tree.write(nxmlpath, "UTF-8")如果写成:tree.
- SQL2000版本用JOB企业管理器--管理--SQL Server代理--右键作业--新建作业--"常规"项中输入作业
- 本文实例介绍了使用javascript来经验表单数据的方法,如:校验是否为英文,校验是否为数字及校验IP地址等: &l
- 本文实例讲述了django+js+ajax实现刷新页面的方法。分享给大家供大家参考,具体如下:在服务器开发的时候,为了方便将服务器对外开一个
- 一、Pandas 读取文件当使用 Pandas 做数据分析的时,需要读取事先准备好的数据集,这是做数据分析的第一步。Panda 提供了多种读
- 在处理json格式字符串的时候,经常会看到声明struct结构的时候,属性的右侧还有反引号括起来的内容。形如:type User struc
- python自定义异常实例详解 本文通过两种
- python中字典的key不能是可变类型。字典可存储任意类型对象,其中值可以取任何数据类型,但键必须是不可变的,如字符串、数字或元组。语法格
- arcgis使用Python脚本进行批量截图介绍最近公司数据部那边有个需求,需要结合矢量数据和影像数据,进行批量截图,并且截图中只能有一个图
- python中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。得到当前工作目录,即当前Python脚本工作的目录路
- asp十进制转二进制;二进制转十进制;二进制转十六进制;十六进制转二进制;八进制转二进制'二进制转八进制;八进制转十进制;十六进制转
- 目录1. 理解进程2. 进程的语法3. join自定义进程类4. 守护进程总结1. 理解进程进程的概念:(process)进程就是正在运行的
- 示例matplotlib中的animation提供了动态绘图功能,下面列举一个最简单的动态绘制三角函数的例子,来初步演示一下。import
- 一.实现思路本文讲解如何使用python实现一个简单的模板引擎, 支持传入变量, 使用if判断和for循环语句, 最终能达到下面这样的效果:
- 去听了牛人 dbaron 的一个 Web Page Layout/Display in Mozilla 讲座( via )。讲的东西对我一个
- typora介绍Typora是一款Markdown编辑器和阅读器风格极简/多种主题/支持 macOS,Windows 及 Linux实时预览
- 最近在做深度学习时需要用到图像处理相关的操作,在度娘上找到的图片旋转方法千篇一律,旋转完成的图片都不是原始大小,很苦恼,于是google到歪
- 今天的这篇文章是讲XHTML中的细节部分的,这篇续述的主题就是ID与CLASS怎么用,在标题中有提及使用原则与技巧,这里的使用原则与技巧是我
- 随着 Node.js v8 的发布,Node.js 已原生支持 async/await 函数,Web 框架 Koa 也随之发布了 Koa 2