表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)