Python 如何从数据帧的多列中获取唯一信息?

Python 如何从数据帧的多列中获取唯一信息?,python,pandas,Python,Pandas,我有一个数据帧df,如下所示 Name1 Name2 ID1 ID2 0 John Jack 3 2 1 John Albert 3 0 2 Jack Eva 2 1 3 Albert Sara 0 4 4 Eva Sara 1 4 我想要一个两列数据框df1,每个名称ID df1 Name ID 0 Albert 0 1 Ev

我有一个数据帧
df
,如下所示

  Name1      Name2  ID1  ID2
0    John    Jack    3    2
1    John  Albert    3    0
2    Jack     Eva    2    1
3  Albert    Sara    0    4
4     Eva    Sara    1    4
我想要一个两列数据框
df1
,每个
名称
ID

df1
     Name     ID
0    Albert   0
1    Eva      1
2    Jack     2
3    John     3
4    Sara     4
使用:

您可以与一起使用以获取唯一值:

(pd.wide_to_long(df.reset_index(), stubnames=['Name','ID'], i='index', j='ix')
  .drop_duplicates().reset_index(drop=True))

     Name  ID
0    John   3
1    Jack   2
2  Albert   0
3     Eva   1
4    Sara   4
细节

将使用指定的
stubmanes
,为您提供一个两列数据帧(
Name
ID
):

x = pd.wide_to_long(df.reset_index(), stubnames=['Name','ID'], i='index', j='ix')
            Name  ID
index ix            
0     1     John   3
1     1     John   3
2     1     Jack   2
3     1   Albert   0
4     1      Eva   1
0     2     Jack   2
1     2   Albert   0
2     2      Eva   1
3     2     Sara   4
4     2     Sara   4
现在,您只需要获取
名称
-
ID
组合的唯一值:

     Name  ID
0    John   3
1    Jack   2
2  Albert   0
3     Eva   1
4    Sara   4
显然,@yatu和@jezrael的解决方案更先进,我也学到了新的API。我的解决方案是直截了当的,也许更容易理解

    ID  Name
0   0   Albert
1   1   Eva
2   2   Jack
3   3   John
4   4   Sara

我怀疑这是一个XY问题(),你到底想做什么?哇-我认为从
df
df1
的过程有一个特定的名字,叫做XY问题:)。谢谢@BlackBear的链接谢谢你的具体名字
df1=df[['ID1','Name1']].copy()
df1.rename(columns={'ID1':'ID','Name1':'Name'},inplace=True)
df2=df[['ID2','Name2']].copy()
df2.rename(columns={'ID2':'ID','Name2':'Name'},inplace=True)

new_df=pd.concat([df1,df2])
new_df.drop_duplicates(inplace=True)
new_df.sort_values(['ID'],inplace=True)
new_df.reset_index(drop=True,inplace=True)

new_df.head()
    ID  Name
0   0   Albert
1   1   Eva
2   2   Jack
3   3   John
4   4   Sara