Python 使用分隔符重塑dataframe列的形状
我有以下数据帧(带有2列str的tab文件): 之后Python 使用分隔符重塑dataframe列的形状,python,pandas,Python,Pandas,我有以下数据帧(带有2列str的tab文件): 之后 df1 = df[df['id2'].notnull()] df2 = df1.drop_duplicates(['id1','id2']) 我得到了df2 id1 id2 g1 ID:05434 g1 ID:05434|ID:38720|ID:33345 我的目标是扩展它,使它只有两列,比如说 id1 id2 g1 ID:05434 g1 ID:05434 g1 ID:38720 g1 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
我的目标是扩展它,使它只有两列,比如说
id1 id2
g1 ID:05434
g1 ID:05434
g1 ID:38720
g1 ID:33345
这个有扩展功能吗
提前感谢。与一起使用,也用于删除NaN
s
编辑:按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
与一起使用,也用于删除NaN
s
编辑:按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
您好@jezrael,您的代码很好,但是由于方法的顺序,重复的代码仍然出现。我将其修改为:“df1=(df.dropna(subset=['col2'])。set_index('col1')['col2'])。str.split('124;',expand=True)。stack()。reset_index(level=1,drop=True)。reset_index(name='col2')。对_值进行排序(按='col1','col2'])。删除重复项('col1','col2'])”。添加sort_值和drop_重复项为我提供了唯一的序列。您好@jezrael,您的代码很好,但是由于方法的顺序,重复项仍然出现。我将其修改为:“df1=(df.dropna(subset=['col2'])。set_index('col1')['col2'])。str.split('124;',expand=True)。stack()。reset_index(level=1,drop=True)。reset_index(name='col2')。对_值进行排序(按='col1','col2'])。删除重复项('col1','col2'])”。添加sort_值和drop_副本给了我唯一的序列。