【发布时间】:2022-11-25 04:14:59
【问题描述】:
我正在寻找一种方法将 pandas 数据框中的 5 行转换为一行,列数是列数的 5 倍(所以我有相同的信息,只是被压缩成一行)。让我解释:
我正在处理曲棍球比赛统计数据。目前,在不同的situations中有5行代表同一个游戏,每行111列。我想将这 5 行转换为一行(以便一场比赛由一行表示)但保留不同情况下包含的信息。换句话说,我想将 5 行,每行 111 列转换成一行 554 列(554=111*5 减一,因为我们在 gameId 上加入)。
因此,作为示例,我们可以看到前 5 行有 gameId = 2008020001,但每一行都有不同的 situation(即 other、all、5on5、4on5 和 5on4)。我希望将这 5 行转换为带有 gameId = 2008020001 的一行,并根据它们的情况标记列。
例如,我想要 all unblockedShotAttemptsAgainst、5on5 unblockedShotAttemptsAgainst、5on4 unblockedShotAttemptsAgainst、4on5 unblockedShotAttemptsAgainst 和 other unblockedShotAttemptsAgainst 的列(其他所有统计数据都相同)。
任何信息,将不胜感激。还值得一提的是,我的数据集相当大(177990 行),因此需要一个有效的解决方案。生成的数据框应该有五分之一的行和 5 倍的列。提前致谢!
----我已经尝试过的----
我尝试使用 df.apply() 和一些嵌套的 for 循环来做到这一点,但它很快就变得非常丑陋,而且速度非常慢。我认为熊猫有更好的方法来做到这一点,但我不确定如何做。
查看其他SO答案,我最初认为它可能与df.pivot()或df.groupby()有关,但我想不通。再次感谢!
【问题讨论】:
-
请提供一个最小的可重复性例子