根据两个列的值和条件在Pandas中创建新列

1 投票
1 回答
38 浏览
提问于 2025-04-13 15:29

我有一个数据表,里面有两列我需要用来计算分数:

id Pos Player GW VP Final Drop TournamentPoints
0 1 1 Alessio Bianchi 2 7.0 5.0 NaN
1 2 2 Gianluca Bianco 2 7.0 0.0 NaN
2 3 2 Sara Rossi 1 5.0 0.0 NaN
3 4 2 Gabriele Verdi 1 4.5 0.0 NaN
4 5 2 Luca Gialli 1 3.0 0.0 NaN

比赛积分是通过GW和VP用一个公式计算出来的:

df['TournamentPoints'] = ((number_of_players / 10) * (df["VP"] + 1)) + (df['GW'] * x)

其中 number_of_players 和 X 是之前计算出来的。

不过我还需要再加一步:

  1. 给“Final”列中值最高的那一行加50分(在这个例子中是Alessio Bianchi)。
  2. 如果有两行的“Final”值相同且都是最高的,只有“Pos”值较低的那一行才能获得50分的加成。

有什么建议吗?谢谢!

我已经尝试过 .apply() 和 .map() 方法,但没有成功。

1 个回答

1

假设Pos已经排好序,你可以使用idxmax,这个方法会选出第一个最大值所在的行:

df['TournamentPoints'] = ((number_of_players / 10) * (df["VP"] + 1)) + (df['GW'] * x)

df.loc[df['Final'].idxmax(), 'TournamentPoints'] += 50

如果Pos没有排好序:

df.loc[df.sort_values(by='Pos')['Final'].idxmax(), 'TournamentPoints'] += 50

撰写回答