我有一个数据框,如下所示:
Col1 Col2 Col3 Col4
AB 2i 2j|2k 2y
CD 3j 3k|3p|3e 3x
因此,对于那些具有管道分隔值的行,我想按如下所示扩展行:(这应该是最终的数据帧)
Col1 Col2 Col3 Col4
AB 2i 2j 2y
AB 2i 2k 2y
CD 3j 3k 3x
CD 3j 3p 3x
CD 3j 3e 3x
因此,必须将流水线分隔的值扩展到自己的行中,并复制其他字段值。如何在pandas数据框中做到这一点?
答案 0 :(得分:2)
使用大熊猫0.25.0+ constructor和来填充列表的列,然后使用Series.str.split
,最后使用默认索引DataFrame.assign
和drop=True
:
df = df.assign(Col3 = df['Col3'].str.split('|')).explode('Col3').reset_index(drop=True)
print (df)
Col1 Col2 Col3 Col4
0 AB 2i 2j 2y
1 AB 2i 2k 2y
2 CD 3j 3k 3x
3 CD 3j 3p 3x
4 CD 3j 3e 3x
编辑:如果列名有空格:
print (df)
Col1 Col2 my col Col4
0 AB 2i 2j|2k 2y
1 CD 3j 3k|3p|3e 3x
df['my col'] = df['my col'].str.split('|')
df = df.explode('my col').reset_index(drop=True)
print (df)
Col1 Col2 my col Col4
0 AB 2i 2j 2y
1 AB 2i 2k 2y
2 CD 3j 3k 3x
3 CD 3j 3p 3x
4 CD 3j 3e 3x
较旧版本的解决方案:
c = df.columns
s = (df.pop('Col3')
.str.split('|', expand=True)
.stack()
.reset_index(drop=True, level=1)
.rename('Col3'))
df = df.join(s).reset_index(drop=True)[c]
print (df)
Col1 Col2 Col3 Col4
0 AB 2i 2j 2y
1 AB 2i 2k 2y
2 CD 3j 3k 3x
3 CD 3j 3p 3x
4 CD 3j 3e 3x