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看看更新的答案是否有用。哦,是的。非常感谢。我在某个地方想起了它,但忘了它就在那里。谢谢你的帮助。