我有一个数据框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
答案 0 :(得分:2)
您可以使用:
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
答案 1 :(得分:0)
如果我理解正确,那么我想到的最简洁的方法就是:
1%
这产生
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)
(我不知道杰克为什么会出现在您期望的输出中的最后一位,我假设是拼写错误或没关系。)