Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用分隔符重塑dataframe列的形状_Python_Pandas - Fatal编程技术网

Python 使用分隔符重塑dataframe列的形状

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

我有以下数据帧(带有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
这个有扩展功能吗

提前感谢。

与一起使用,也用于删除
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_副本给了我唯一的序列。