熊猫分层索引:基于第二级索引值的合并/合并行

时间:2020-07-10 23:09:07

标签: python pandas

我有一个熊猫数据框,它已被分组为一个多索引,它基本上按游戏ID对统计数据进行分组,其中2级索引为团队的ID。我正在使用此数据进行机器学习,并且需要将统计信息放在同一行中,其中列名将由team1或team1联接,如team1.pts和team2.pts一样。可以用任何方便的方式吗?

非常感谢您的帮助,我附上了数据框的屏幕截图,以防万一我做了可怕的解释。

Table Example

编辑:

为了更好地解释这一点,应该将每个连续的行与其上方的行连接起来,以将数据框扁平化为行数的一半,并将列数加倍。

1 个答案:

答案 0 :(得分:0)

  1. 始终提供数据-通过OCR很难提供帮助
  2. reset_index()就是行号
  3. 计算游戏集,您要加入连续的游戏。这确实假定它们成对出现。如果不需要,将需要更好的计算
  4. 加入游戏集中的第一行和第二行(最后)。列名是后缀而不是前缀
js = {"game.id":[15,15,16,16,17,17,18,18],"team.id":[16,30,14,25,4,22,3,30],"id":[2892,4836,5005,4771,5538,5707,7397,7228],"ast":[6,19,23,21,32,18,22,14],"blk":[1,15,6,10,4,7,6,1],"dreb":[14,33,38,40,43,32,43,24]}
df = pd.DataFrame(js).set_index(["game.id","team.id"])
dfx = df.reset_index().assign(gameset=lambda r: r.index//2) 
dfx.groupby(["game.id","gameset"]).first().join(dfx.groupby(["game.id","gameset"]).last(), lsuffix=".1st", rsuffix=".2nd")

输出

        team.id.1st id.1st  ast.1st blk.1st dreb.1st    team.id.2nd id.2nd  ast.2nd blk.2nd dreb.2nd
game.id gameset                                     
15  0   16  2892    6   1   14  30  4836    19  15  33
16  1   14  5005    23  6   38  25  4771    21  10  40
17  2   4   5538    32  4   43  22  5707    18  7   32
18  3   3   7397    22  6   43  30  7228    14  1   24