我有以下数据框(带有2列str的选项卡文件):
id1 id2
g1 ID:05434
g1 ID:05434
g1 NaN
g1 ID:05434|ID:38720|ID:33345
做完
df1 = df[df['id2'].notnull()]
df2 = df1.drop_duplicates(['id1','id2'])
我有df2,
id1 id2
g1 ID:05434
g1 ID:05434|ID:38720|ID:33345
我打算将其扩展为仅2列,例如
id1 id2
g1 ID:05434
g1 ID:05434
g1 ID:38720
g1 ID:33345
对此有扩展功能吗?
谢谢。
答案 0 :(得分:2)
将str.split
与stack
一起使用,DataFrame.dropna
也用于删除NaN
。
编辑:通过OP注释被删除,该注释最后以排序值重复出现:
df2 = (df.dropna(subset=['id2'])
.set_index('id1')['id2']
.str.split('|', expand=True)
.stack()
.reset_index(level=1, drop=True)
.reset_index(name='id2')
.sort_values(by=['col1', 'col2'])
.drop_duplicates(['col1','col2']))
print (df2)
id1 id2
0 g1 ID:05434
2 g1 ID:38720
3 g1 ID:33345