根据其他列中的值映射某些列中的数据帧值
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)
我有一个如下所示的数据框:
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)