Python Pandas list列表数据列拆分成多行的方法实现


Posted in Python onDecember 14, 2020

1、实现的效果

示例代码:

df=pd.DataFrame({'A':[1,2],'B':[[1,2],[1,2]]})
df
Out[458]: 
  A    B
0 1 [1, 2]
1 2 [1, 2]

拆分成多行的效果:

   A  B
0  1  1
1  1  2
3  2  1
4  2  2

2、拆分成多行的方法

1)通过apply和pd.Series实现

容易理解,但在性能方面不推荐。

df.set_index('A').B.apply(pd.Series).stack().reset_index(level=0).rename(columns={0:'B'})
Out[463]: 
  A B
0 1 1
1 1 2
0 2 1
1 2 2

2)使用repeat和DataFrame构造函数

性能可以,但不太适合多列

df=pd.DataFrame({'A':df.A.repeat(df.B.str.len()),'B':np.concatenate(df.B.values)})
df
Out[465]: 
  A B
0 1 1
0 1 2
1 2 1
1 2 2

或者

s=pd.DataFrame({'B':np.concatenate(df.B.values)},index=df.index.repeat(df.B.str.len()))
s.join(df.drop('B',1),how='left')
Out[477]: 
  B A
0 1 1
0 2 1
1 1 2
1 2 2

3)创建新的列表

pd.DataFrame([[x] + [z] for x, y in df.values for z in y],columns=df.columns)
Out[488]: 
  A B
0 1 1
1 1 2
2 2 1
3 2 2

或者

#拆成多于两列的情况
s=pd.DataFrame([[x] + [z] for x, y in zip(df.index,df.B) for z in y])
s.merge(df,left_on=0,right_index=True)
Out[491]: 
  0 1 A    B
0 0 1 1 [1, 2]
1 0 2 1 [1, 2]
2 1 1 2 [1, 2]
3 1 2 2 [1, 2]

4)使用reindex和loc实现

df.reindex(df.index.repeat(df.B.str.len())).assign(B=np.concatenate(df.B.values))
Out[554]: 
  A B
0 1 1
0 1 2
1 2 1
1 2 2
#df.loc[df.index.repeat(df.B.str.len())].assign(B=np.concatenate(df.B.values)

5)使用numpy高性能实现

newvalues=np.dstack((np.repeat(df.A.values,list(map(len,df.B.values))),np.concatenate(df.B.values)))
pd.DataFrame(data=newvalues[0],columns=df.columns)
  A B
0 1 1
1 1 2
2 2 1
3 2 2

到此这篇关于Python Pandas list列表数据列拆分成多行的方法实现的文章就介绍到这了,更多相关Pandas list列拆分成多行内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python发送邮件接收邮件示例分享
Jan 21 Python
跟老齐学Python之玩转字符串(2)更新篇
Sep 28 Python
使用Python的web.py框架实现类似Django的ORM查询的教程
May 02 Python
python字符类型的一些方法小结
May 16 Python
python 中的list和array的不同之处及转换问题
Mar 13 Python
pyqt5的QWebEngineView 使用模板的方法
Aug 18 Python
python实现简单多人聊天室
Dec 11 Python
python版DDOS攻击脚本
Jun 12 Python
python如何实现代码检查
Jun 28 Python
python对绑定事件的鼠标、按键的判断实例
Jul 17 Python
jupyter notebook 增加kernel教程
Apr 10 Python
scrapy中如何设置应用cookies的方法(3种)
Sep 22 Python
pandas将list数据拆分成行或列的实现
Dec 13 #Python
pandas按照列的值排序(某一列或者多列)
Dec 13 #Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
Dec 13 #Python
pandas抽取行列数据的几种方法
Dec 13 #Python
python3.9实现pyinstaller打包python文件成exe
Dec 13 #Python
Pandas中两个dataframe的交集和差集的示例代码
Dec 13 #Python
使用pandas实现筛选出指定列值所对应的行
Dec 13 #Python
You might like
我的论坛源代码(四)
2006/10/09 PHP
phpStudy2016 配置多个域名期间遇到的问题小结
2017/10/19 PHP
番茄的表单验证类代码修改版
2008/07/18 Javascript
基于JQuery模仿苹果桌面的Dock效果(初级版)
2012/10/15 Javascript
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
jquery如何根据值设置默认的选中项
2014/03/17 Javascript
JavaScript中的Web worker多线程API研究
2014/12/06 Javascript
javascript如何操作HTML下拉列表标签
2015/08/20 Javascript
深入理解jquery跨域请求方法
2016/05/18 Javascript
jQuery+ajax+asp.net获取Json值的方法
2016/06/08 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
JavaScript+HTML5实现的日期比较功能示例
2017/07/12 Javascript
JS和jQuery通过this获取html标签中的属性值(实例代码)
2017/09/11 jQuery
Vue.js devtool插件安装后无法使用的解决办法
2017/11/27 Javascript
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
2018/04/17 jQuery
JS实现动态生成html table表格的方法分析
2018/07/11 Javascript
谈谈JavaScript中super(props)的重要性
2019/02/12 Javascript
CountUp.js实现数字滚动增值效果
2019/10/17 Javascript
在vue中使用vuex,修改state的值示例
2019/11/08 Javascript
ant design实现圈选功能
2019/12/17 Javascript
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
python中的闭包用法实例详解
2015/05/05 Python
浅谈对yield的初步理解
2017/05/29 Python
python+selenium实现登录账户后自动点击的示例
2017/12/22 Python
Python装饰器用法示例小结
2018/02/11 Python
python opencv旋转图像(保持图像不被裁减)
2018/07/26 Python
pytorch的梯度计算以及backward方法详解
2020/01/10 Python
一文了解python 3 字符串格式化 F-string 用法
2020/03/04 Python
如何在Python 游戏中模拟引力
2020/03/27 Python
表达自我的市场:Society6
2018/08/01 全球购物
学生学习总结的自我评价
2013/10/22 职场文书
保险专业大专生求职信
2013/10/26 职场文书
招商经理岗位职责
2013/11/16 职场文书
机电专业个人求职信范文
2013/12/30 职场文书
水电工程师岗位职责
2015/02/13 职场文书
检讨书之工作不认真
2019/08/14 职场文书