代码之家  ›  专栏  ›  技术社区  ›  Matt

将分组数据应用回原始数据帧

  •  0
  • Matt  · 技术社区  · 7 年前

    这些都是国际象棋游戏,我试图分组游戏,然后执行一个功能,在每个游戏的基础上,在该游戏中的移动数。。。

            game_id     move_number colour  avg_centi
    0       03gDhPWr    1           white   NaN
    1       03gDhPWr    2           black   37.0
    2       03gDhPWr    3           white   61.0
    3       03gDhPWr    4           black   -5.0
    4       03gDhPWr    5           white   26.0
    5       03gDhPWr    6           black   31.0
    6       03gDhPWr    7           white   -2.0
    ... ... ... ... ...
    110091  zzaiRa7s    34          black   NaN
    110092  zzaiRa7s    35          white   NaN
    110093  zzaiRa7s    36          black   NaN
    110094  zzaiRa7s    37          white   NaN
    110095  zzaiRa7s    38          black   NaN
    110096  zzaiRa7s    39          white   NaN
    110097  zzaiRa7s    40          black   NaN
    

    具体来说,我用的是 pd.cut game_phase

    我使用以下代码来实现这一点。请注意,每个游戏必须划分为 opening middlegame ,和 endgame 基于游戏中的移动总数。

    def define_move_phase(x):
        bins = (0, round(x['move_number'].max() * 1/3), round(x['move_number'].max() * 2/3), x['move_number'].max())    
        phases = ["opening", "middlegame", "endgame"]
        try:
            x.loc[:, 'phase'] = pd.cut(x['move_number'], bins, labels=phases)
        except ValueError:
            x.loc[:, 'phase'] = None
        print(x)
    
    df.groupby('game_id').apply(define_move_phase)
    

    这个 print phase

         game_id  move_number colour  avg_centi    phase
    0   03gDhPWr            1  white        NaN  opening
    1   03gDhPWr            2  black       37.0  opening
    2   03gDhPWr            3  white       61.0  opening
    3   03gDhPWr            4  black       -5.0  opening
    4   03gDhPWr            5  white       26.0  opening
    5   03gDhPWr            6  black       31.0  opening
    6   03gDhPWr            7  white       -2.0  opening
    ..       ...          ...    ...        ...      ...
    54  03gDhPWr           55  white       58.0  endgame
    55  03gDhPWr           56  black       26.0  endgame
    56  03gDhPWr           57  white      116.0  endgame
    57  03gDhPWr           58  black     2000.0  endgame
    58  03gDhPWr           59  white        0.0  endgame
    59  03gDhPWr           60  black        0.0  endgame
    60  03gDhPWr           61  white        NaN  endgame
    
    [61 rows x 5 columns]
         game_id  move_number colour  avg_centi    phase
    0   03gDhPWr            1  white        NaN  opening
    1   03gDhPWr            2  black       37.0  opening
    2   03gDhPWr            3  white       61.0  opening
    3   03gDhPWr            4  black       -5.0  opening
    4   03gDhPWr            5  white       26.0  opening
    5   03gDhPWr            6  black       31.0  opening
    6   03gDhPWr            7  white       -2.0  opening
    ..       ...          ...    ...        ...      ...
    54  03gDhPWr           55  white       58.0  endgame
    55  03gDhPWr           56  black       26.0  endgame
    56  03gDhPWr           57  white      116.0  endgame
    57  03gDhPWr           58  black     2000.0  endgame
    58  03gDhPWr           59  white        0.0  endgame
    59  03gDhPWr           60  black        0.0  endgame
    60  03gDhPWr           61  white        NaN  endgame
    
    [61 rows x 5 columns]
    

    等。。。

    我想申请新的 列返回到原始数据帧,或将分组的数据帧再次解组为一个大数据帧。最好的办法是什么?

    0 回复  |  直到 7 年前
        1
  •  1
  •   Mitchell Posluns    7 年前

    您的函数没有return语句