根据其他列中的值映射某些列中的数据帧值

Map dataframe values in some columns according to the values in other columns

我有一个如下所示的数据框:

    home_player_1 home_player_2 home_player_3 away_player_1 away_player_2 away_player_3 player_1 ~~~ player_2000
1   23            34             45            2              6               688       0       ~~~  0
2   233           341            4             123            246             678       0       ~~~  0
3   231           234            145           222            6               698       0       ~~~  0
4   235           934            445           1972           16              1688      0       ~~~  0

从player_1到player_2000的列都是零,将根据前面的列进行映射。规则是“player_n”,其中n是一个数字,代表玩家的编号,如果玩家n出现在前6列中的任意一列,则等于1;否则为 0。 例如,第一行的预期输出就像,

player_23=player_34=player_45=player_2=player_6=player_688=1, others are 0.

注意:同一行之间没有重复出现。

下面的代码应该会为您提供所需的 DataFrame:

for index, row in df.iterrows():
    values = row[:6]
    for value in values:
        df.at[index, 'player_{}'.format(value)] = 1

编辑:

如果您想避免遍历行,您可以使用 apply:

def update_row(row):
    values = row[:6]
    for value in values:
        row.loc['player_{}'.format(value)] = 1
    return row

result_df = df.apply(lambda row: update_row(row), axis=1)