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

时间:2020-10-20 21:23:13

标签: python pandas dataframe logic

我有一个看起来像这样的数据框:

    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的列全为零,并将根据前面的列进行映射。规则是,如果玩家n出现在前6列中的任何一列中,则“ player_n”(其中n是代表玩家数目的数字)等于1;否则为0。 例如,第一行中的预期输出类似于

player_23 = player_34 = player_45 = player_2 = player_6 = player_688 = 1,其他 是0。

注意:同一行中没有重复的显示。

1 个答案:

答案 0 :(得分:1)

以下代码应为您提供所需的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)