Pandas根据条件将一列映射到另一列

2024-04-29 15:26:09 发布

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

我有一个数据帧

        game_id  move_number  move      colour  avg_centi   phase
    0   03gDhPWr    1         e4        white   NaN         opening
    1   03gDhPWr    2         d5        black   37.0        opening
    2   03gDhPWr    3         e5        white   61.0        opening
    3   03gDhPWr    4         c5        black   -5.0        opening
    4   03gDhPWr    5         Nf3       white   26.0        opening
... ... ... ... ... ... ...
110093  zzaiRa7s    36        a5+       black   NaN         endgame
110094  zzaiRa7s    37        Kxb5      white   NaN         endgame
110095  zzaiRa7s    38        c6+       black   NaN         endgame
110096  zzaiRa7s    39        Ka4       white   NaN         endgame
110097  zzaiRa7s    40        Q@b4#     black   NaN         endgame

我想映射colour列,这样当颜色为black时,colour列的值将替换为phase列中的值。我希望使用pandas mapapply函数来实现这一理想。不是replace太慢了。在

生成的数据帧应如下所示:

^{pr2}$

我尝试过以下代码,但似乎不太管用:

def wrangle_game_phase(x):
    if x == 'black':
        return phase
    else:
        return x

df['game_type'] = df['colour'].apply(wrangle_game_phase)

Tags: 数据gamedfmovereturnnanblackapply
3条回答

你试过了吗?loc…请试一下:

df.loc[df['Color'] =='Black', 'Color'] = df['Phase']

pd.DataFrame.loc使用布尔索引:

m = df['colour'] == 'black'
df.loc[m, 'colour'] = df.loc[m, 'phase']
         game_id  move_number   move   colour  avg_centi    phase
0       03gDhPWr            1     e4    white        NaN  opening
1       03gDhPWr            2     d5  opening       37.0  opening
2       03gDhPWr            3     e5    white       61.0  opening
3       03gDhPWr            4     c5  opening       -5.0  opening
4       03gDhPWr            5    Nf3    white       26.0  opening
110093  zzaiRa7s           36    a5+  endgame        NaN  endgame
110094  zzaiRa7s           37   Kxb5    white        NaN  endgame
110095  zzaiRa7s           38    c6+  endgame        NaN  endgame
110096  zzaiRa7s           39    Ka4    white        NaN  endgame
110097  zzaiRa7s           40  Q@b4#  endgame        NaN  endgame

使用np.where

例如:

df['game_type'] = np.where(df["colour"] == 'black', df["phase"], df["colour"])

相关问题 更多 >