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

问题描述

我有一个包含无组织数据的数据框。

df = pd.DataFrame({'id':['1','2','3','4'],'name':['Jon','Jack','Jane','Jill'],'A':['C','A','E','B'],'B':['','C','D',],'C':['E','','A'],'D':['','B','D'],'Z':['','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','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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...