Pandas 熊猫将数据重新排列为具有相同值的列

Pandas 熊猫将数据重新排列为具有相同值的列,pandas,dataframe,rows,columnsorting,Pandas,Dataframe,Rows,Columnsorting,我有一个无组织数据的数据框架 df = pd.DataFrame({'id':['1', '2', '3', '4'], 'name':['Jon', 'Jack', 'Jane', 'Jill'], 'A':['C', 'A', 'E', 'B'], 'B':['', 'C', 'D', 'E',], 'C':['E', 'E', '', 'A'],

我有一个无组织数据的数据框架

df = pd.DataFrame({'id':['1', '2', '3', '4'],
               'name':['Jon', 'Jack', 'Jane', 'Jill'],
               'A':['C', 'A', 'E', 'B'],
               'B':['', 'C', 'D', 'E',],
               'C':['E', 'E', '', 'A'],
               'D':['', '', 'B', 'D'],
               'Z':['', '', 'A', 'C']})

id  name    A   B   C   D   Z
1   Jon     C       E       
2   Jack    A   C   E       
3   Jane    E   D       B   A
4   Jill    B   E   A   D   C
我想在相同的列下组织相等的行值:

id  name    A   B   C   D   Z
1   Jon             C       E
2   Jack    A       C       E
3   Jane    A   B       D   E
4   Jill    A   B   C   D   E

谢谢您的帮助。

让我们试试广播:

cols = np.array(['A','B','C','D','Z'])
vals = np.array(['A','B','C','D','E'])

a = (df[cols].values[:,None,:] == vals[None,:,None])

# any(-1) checks if any `cols` is hit
df[cols] = np.where(a.any(-1), vals, '')
输出:

  id  name  A  B  C  D  Z
0  1   Jon        C     E
1  2  Jack  A     C     E
2  3  Jane  A  B     D  E
3  4  Jill  A  B  C  D  E

列名的值是否始终相同?是否有没有列的值?(实际上,虚拟对象似乎更简单一些)列名并不总是与值相同。我应该附上一个例子专栏。我已经更新了我的问题来说明这一点。谢谢,我接受这个答案,因为它回答了我原来写的问题。非常感谢。您知道如何处理与行值不同的列名以及没有相应列名的行值吗?我已经将E列更新为Z列。我不太清楚你的意思。你想把所有的E值都放在Z列下吗?正确,我在原来的问题中做了更改以显示这一点。@bLund看看更新的答案是否有用。哦,是的。非常感谢。我在某个地方想起了它,但忘了它就在那里。谢谢你的帮助。