Pandas:在同一数据帧中合并两行

2024-06-16 12:44:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,包含2020赛季每场比赛的NBA统计数据。问题是,日期框在每场比赛中有2行。第1行是一个队的统计数据,第2行是对方队的统计数据。我想合并这两行。当我合并这些数据时,我想将列数增加一倍,并在所有列名称前添加一个“a”,以区分哪些是主队的数据,哪些是客队的数据

例如,一个看起来像这样的数据帧

Team_ID     Abrv      Game_ID      Pts
123         LAL         111         101
124         NOP         111         110
125         NYK         112         98
126         WAS         112         116

之后会是这样的:

Team_ID    Abrv       Game_ID      Pts   aTEAM_ID    aAbrv    aPTS
123        LAL        111          101   124         NOP      110
123        NYK        112          98    126         WAS      116

Tags: 数据名称idgameteamnoppts统计数据
2条回答

尝试使用concat,然后展平多索引

out = df.assign(key=df.groupby('Game_ID').cumcount().astype(str)).set_index(['Game_ID','key']).unstack('key').sort_index(level=1,axis=1)

out.columns=out.columns.map('_'.join)
out
Out[444]: 
        Abrv_0  Pts_0  Team_ID_0 Abrv_1  Pts_1  Team_ID_1
Game_ID                                                  
111        LAL    101        123    NOP    110        124
112        NYK     98        125    WAS    116        126

尝试:

cumcount = df.groupby('Game_ID').cumcount()
renamer = {0: 'Home', 1: 'Away'}
df = df.set_index(['Game_ID', cumcount]).rename(renamer, level=1).unstack()

        Team_ID      Abrv       Pts     
           Away Home Away Home Away Home
Game_ID                                 
111         124  123  NOP  LAL  110  101
112         126  125  WAS  NYK  116   98

微小变化

cumcount = df.groupby('Game_ID').cumcount()
renamer = {0: 'Home', 1: 'Away'}
df = df.set_index(['Game_ID', cumcount]).rename(renamer, level=1) \
  .unstack().swaplevel(0, 1, 1).sort_index(1)

        Away              Home             
        Abrv  Pts Team_ID Abrv  Pts Team_ID
Game_ID                                    
111      NOP  110     124  LAL  101     123
112      WAS  116     126  NYK   98     125

相关问题 更多 >