Python Pandas list列表数据列拆分成多行的方法实现
作者:levi 发布时间:2021-04-20 18:56:01
标签:Pandas,list,列,拆分,行
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
来源:https://www.cjavapy.com/article/237/
0
投稿
猜你喜欢
- html_downloaderfrom urllib import requestdef download(url): &nb
- 在平时开发过程中,经常遇到需要在数据中获取特定的元素的信息,如到达目的地最近的车站,橱窗里面最贵的物品等等。怎么办?看下面方法一: 利用数组
- 前言:内容提要:本文比较了 Python 中用于列表排序的两种函数 sort() 和 sorted(),帮助您选择合适的排序函数。对列表排序
- 下列语句部分是Mssql语句,不可以在access中使用。SQL语句分类:DDL—数据定义语言(CREATE,ALTER,DROP,DECL
- 窗口程序的开发流程如下:1. 先通过qt designer设置界面并将程序图标设置好,通过在designer中按ctrl + R 进行预览可
- get方法代码实现# coding:utf-8import jsonfrom urlparse import parse_qsfrom ws
- 本文实例讲述了PHP封装CURL扩展类。分享给大家供大家参考。具体如下:<?php/*** @description: 封装CURL扩
- 这里会讨论令Oracle停机时间最小化的步骤。各种形式的停机--计划的或者是非计划的--总是不断地发生,一个DBA应该有正确的备份策略,这样
- Django的Field类中方法有:to_python() # 把数据库数据转成python数据from_db_value() # 把数据库
- 0. 学习目标单链表只有一个指向直接后继的指针来表示结点间的逻辑关系,因此可以方便的从任一结点开始查找其后继结点,但要找前驱结点则比较困难,
- 前后端分离前后端分离的好处最大的好处就是前端JS可以做很大部分的数据处理工作,对服务器的压力减小到最小。后台错误不会直接反映到前台,错误接秒
- 在我供职的公司不仅仅拥有Oracle数据库,同时还拥有SQL Server数据库,所以我经常遇见人们向我提两种问题。 第一种通常都是以&qu
- PyCharm 是一款功能强大的 Python 编辑器,具有跨平台性,鉴于目前最新版 PyCharm 使用教程较少,为了节约时间,来介绍下p
- 先看一下flask-login模块的整体架构基础的信息和全局配置这里就不多说,需要用到再斟酌也可以的。这里也是针对每个模块较为常用的进行解释
- 前期准备1.beat插件安装pip3 install django-celery-beat2.注册APPINSTALLED_APPS = [
- 方法1: 代码如下:truncate table TableName 删除表中的所有的数据的同时,将自动增长清零。 如果有外键参考这个表,这
- 代码伺候:先看如下代码:例1: message = Message.objects.filter(pk=message_id2)messag
- 新建图像文件后选Channels面板,新建Alpha1通道; 做压
- 支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised learning)方式对数据进行
- 使用drop()方法删除pandas.DataFrame的行和列。在0.21.0版之前,请使用参数labels和axis指定行和列。从0.2