根据两个列的值和条件在Pandas中创建新列
我有一个数据表,里面有两列我需要用来计算分数:
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 是之前计算出来的。
不过我还需要再加一步:
- 给“Final”列中值最高的那一行加50分(在这个例子中是Alessio Bianchi)。
- 如果有两行的“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