【问题标题】:Pandas rearrange data into columns of same valuesPandas 将数据重新排列为具有相同值的列
【发布时间】:2021-05-25 23:10:50
【问题描述】:

我有一个包含杂乱数据的数据框。

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

感谢您的帮助。

【问题讨论】:

  • 列名是否总是与值相同?您是否有没有列的值? (而且看起来假人会更简单一些)
  • 列名并不总是与值相同。我应该在其中包含一个示例列。我已经更新了我的问题以表明这一点。谢谢

标签: pandas dataframe rows columnsorting


【解决方案1】:

让我们尝试广播:

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 列下?
  • 正确,我在原始问题中进行了更改以表明这一点。
  • 哦,是的。非常感谢。我脑子里有那个地方,但忘了它在那里。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2018-01-16
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-10
  • 2021-02-24
  • 2021-09-15
相关资源
最近更新 更多