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
0
投稿
猜你喜欢
- 在一个群上看到好几次问到call和apply的作用,function这两个方法的效果大家都很容易理解,但一般很难让人深刻地理解使用它们的时机
- 本文实例为大家分享了python爬取网页内容转换为PDF的具体代码,供大家参考,具体内容如下将廖雪峰的学习教程转换成PDF文件,代码只适合该
- What? 什么是面包屑面包屑是作为辅助和补充的导航方式(secondary navigation scheme),它能让用户知道在网站或应
- 前言读取站点资料数据对站点数据进行插值,插值到规则网格上绘制EOF第一模态和第二模态的空间分布图绘制PC序列关于插值,这里主要提供了两个插值
- 开发环境:Pycharm 2018.3 + Anaconda3(5.3.0) + Python 3.7.1 + Numpy 1.15.4在此
- 前言以下述环境为例:python=3.7pytorch=1.7.1torchvision==0.8.2cudatoolkit=10.1pyt
- 前言很多文章在谈及曲线平滑的时候,习惯使用拟合的概念,我认为这是不恰当的。平滑后的曲线,一定经过原始的数据点,而拟合曲线,则不一定要经过原始
- 需求:看到朋友圈有人发词云照片,感觉自己也可以玩一玩,于是乎借助wordcloud实现功能。环境:MacOS 10.12 +Python 2
- python循环结构Python中循环结构有两种类型,分别是:for(遍历循环)于while(无限循环),接下来对两种循环类型的使用与注意事
- 在做自动化测试时,遇到两种情况需要判断usb是否已连接上(注,本文仅针对用adb命令来control手机)一种是在开测时(前提是同时要测试多
- 我就废话不多说了,大家还是直接看代码吧!### 以下链接里面的codeimport numpy as npfrom keras.callba
- 本文为大家分享了python实现俄罗斯方块游戏,继上一篇的改进版,供大家参考,具体内容如下1.加了方块预览部分2.加了开始按钮在公司实习抽空
- 今天在推上看到一条获取PHP类私有属性的推文,感觉很有意思:顺着推文联想,还有其他方式吗?经过自己的测试及网上答案,总结出三种方法:1. 反
- 前言:多态的实现必须满足两个前提条件1.继承:多态一定是发生在子类和父类之间2.重写:多态子类重写了父类的方法记住这两点再结合代码示例有助于
- 代码如下:var obj = document.getElementById("name"
- ECharts是一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器,底层依赖轻量级的Canvas类
- 无论是 DAO 还是 ADO 都有两种从 Recordset 对象中查询记录的方法: Find 方法和 Seek 方法。在这两种方法中可以让
- import numpy as npimport sysdef conv_(img, conv_filter): filter_
- 建立合理的索引提高SQL Server的性能在应用系统中,尤其在联机事务处理系统中,对数据查询及处理速度已成为衡量应用系统成败的标准。而采用
- #!/usr/bin/env python# -*- coding: utf-8 -*-'''''