一、將一個CELL的一行轉(zhuǎn)成多行
在做數(shù)據(jù)清洗時,有時會遇到一個cell中是很多個逗號隔開的數(shù)據(jù)蹲姐,也就是一對多的情況,而我們需要將其轉(zhuǎn)為每一行是一對一的格式,這時可用itertools中的chain函數(shù):
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轉(zhuǎn)成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()