Python 如何重塑数据帧以保持唯一信息?

Python 如何重塑数据帧以保持唯一信息?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框df1,其中包含代理之间交互及其状态的信息 df1 Name1 Name2 Name1_x Y_x Name1_y Y_y 0 Jack John Jack 0 John 1 1 Sarah Jack Sarah 0 Jack 0 2 Sarah Eva Sarah 0 Eva 1 3 Eva Tom Eva 1 Tom 0 4

我有一个数据框
df1
,其中包含代理之间交互及其状态的信息

df1
     Name1   Name2  Name1_x Y_x Name1_y Y_y
0    Jack    John   Jack     0  John     1
1    Sarah   Jack   Sarah    0  Jack     0
2    Sarah   Eva    Sarah    0  Eva      1
3    Eva     Tom    Eva      1  Tom      0
4    Eva     John   Eva      1  John     1
我想要一个带有名称和状态
y
的数据框,例如

df2
     Name   Y
0    Eva    1
1    John   1
2    Tom    0
3    Sarah  0
4    Jack   0
您可以使用:

df2 = pd.DataFrame(np.r_[df1.iloc[:,2:4], df1.iloc[:,4:6]], columns=['Name', 'Y']).drop_duplicates().reset_index(drop=True)
输出:

    Name  Y
0   Jack  0
1  Sarah  0
2    Eva  1
3   John  1
4    Tom  0

如果我理解正确,我能想到的实现您的结果的最简洁的方法是:

df2 = pd.DataFrame(df1.loc[:, 'Name1_x':].values.reshape(-1, 2), columns=['Name', 'Y']).drop_duplicates()
这就产生了

    Name  Y
0   Jack  0
1   John  1
2  Sarah  0
5    Eva  1
7    Tom  0
你可以用它来分类

df2 = df2.sort_values(by=['Y', 'Name'], ascending=[False, True]).reset_index(drop=True)                                                                                                
最终的结果是

    Name  Y
0    Eva  1
1   John  1
2   Jack  0
3  Sarah  0
4    Tom  0

(我不知道为什么Jack最后出现在您的预期输出中,我假设输入错误或者这无关紧要。)

@pygo我只有一个DataFrameOK,我看到信息更新。您能解释更多关于交互的信息吗,比如我看到最初的三列,然后是状态,然后是另一列和状态,获得新的期望状态的关键是什么。