我有一个看起来像这样的数据框:
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。
注意:同一行中没有重复的显示。
答案 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)