我将不提供用例不可知的方式来解释这一点,因为会更加清楚。
我有三列:PlayerName,Salary,Position。
一个例子:
PlayerName, Salary, Position
Joe, 3000, FWD
Joe, 4500, FWD
Bill, 3200, CNT
Bill, 2000, CNT
Jill, 1200, GRD
Jill, 2200, GRD
我需要找到名称相同的地方,然后将薪水较高的行的位置重命名为CPT([原始位置值])
我最坚持的事情是如何进行相同的列比较,不仅是查找重复项(例如使用np.isin),而且还要进行比较。
在此示例中,输出为:
Joe, 3000, FWD
Joe, 4500, CPT (FWD)
Bill, 3200, CPT (CNT)
Bill, 2000, CNT
Jill, 1200, GRD
Jill, 2200, CPT (GRD)
答案 0 :(得分:2)
您说总是有2个重复的条目,因此您可以简单地使用idxmax
+ loc
:
m = df.groupby('PlayerName')['Salary'].idxmax()
df.loc[m, 'Position'] = 'CPT' + df.loc[m, 'Position'].map(' ({})'.format)
PlayerName Salary Position
0 Joe 3000 FWD
1 Joe 4500 CPT (FWD)
2 Bill 3200 CPT (CNT)
3 Bill 2000 CNT
4 Jill 1200 GRD
5 Jill 2200 CPT (GRD)
答案 1 :(得分:2)
您可以找到每个玩家的最高薪水列,然后可以匹配索引(当您所在的行有该玩家的最高薪水时,它会为True)并更新这些索引的位置字符串值。请尝试以下操作:
player_df = pd.DataFrame(columns=["PlayerName", "Salary", "Position"], data=[
["Joe", 3000, "FWD"],
["Joe", 4500, "FWD"],
["Bill", 3200, "CNT"],
["Bill", 2000, "CNT"],
["Jill", 1200, "GRD"],
["Jill", 2200, "GRD"]])
player_df["top_sal"] = player_df.groupby("PlayerName")["Salary"].transform("max")
player_df.loc[player_df["top_sal"] == player_df["Salary"], "Position"] = "CPT (" + player_df["Position"] + ")"