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