一、将一个CELL的一行转成多行
在做数据清洗时,有时会遇到一个cell中是很多个逗号隔开的数据,也就是一对多的情况,而我们需要将其转为每一行是一对一的格式,这时可用itertools中的chain函数:
import numpy as np
import pandas as pd
from itertools import chain
df = pd.DataDrame({'column 1':[ 'og1', 'or2','or3'],
'column 2':['1,2,3,4', '2,3,4,5', '5,3,2,1']})
# 将逗号隔开的string转成list
def chainer(s):
return list(chain.from_iterable(s.str.split(',')))
# 计算list 长度
lens = df['column 2'].str.split(',').map(len)
new_df = pd.DataFrame({'column 1':np.repeat(df['column 1'], lens),
'column 2':chainer(df['column 2'])})
二、将多行合成一行
df = new_df.groupby('column 1')['column 2'].apply(lambda x:', '.join(x.astype(str))).reset_index()
网友评论