pandas表格-拆分Excel的单元格为多行,将多行数据汇聚到一行用分隔符号分开

表A数据如下:

名字心情地址财富情况年龄单身情况
小明惊奇中国28单身
小红高兴中国23单身
张三喜悦中国32单身
张三怜悯中国32单身
张三哀愁中国32单身
李四畏惧中国35单身
李四害怕中国35单身

 

表B数据:(想要把表A“心情”这一列每个人对应一样就行了,多个心情的用 / 隔开)

名字心情地址财富情况年龄单身情况
小明惊奇中国28单身
小红高兴中国23单身
张三喜悦/怜悯/哀愁中国32单身
李四畏惧/害怕中国35单身

 

第一种:将表A转换成表B

代码如下:将实现代码写成了一行,不建议这样写(*)里面用到的关键方法有:groupby.first()  ,  drop()   ,   merge()  ,  apply   , reset_index , reindex .

其中的关键点在apply中的 .str.cat(sep='/')

import pandas as pd
#读取数据
data_A = pd.read_csv('d:/table.csv',encoding='gbk')
#转换操作
data_B = data_A.groupby('名字').first().reset_index().drop('心情',axis=1).merge(data_A.groupby(by = '名字').apply(lambda g:g['心情'].str.cat(sep='/')).rename('心情').reset_index(),on='名字').reindex(columns=list(data_A.columns))
#导出数据
data_B.to_csv('d:/data_B.csv',encoding='gbk',index=False)

第二种:将表B转换成表A

 

代码如下:将实现代码写成了一行,不建议这样写(*)里面用到的关键方法有:join  , split('/', expand=True) , stack() , reset_index() , rename() , reindex().

其中的关键点在str.split('/', expand=True).stack()

import pandas as pd
#读取数据
data_B = pd.read_csv('d:/data_B.csv')
#转换操作
data_A = data_B.drop('心情', axis=1).join(data_B['心情'].str.split('/', expand=True).stack().reset_index(level=1, drop=True).rename('心情')).reindex(columns=list(data_B.columns))
#导出数据
data_A.to_csv('d:/data_A.csv',encoding='gbk',index=False)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值