在一列中查找重复项,比较另一列,在DataFrame中修改第三列

时间:2019-01-19 18:47:41

标签: python pandas

我将不提供用例不可知的方式来解释这一点,因为会更加清楚。

我有三列: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)

2 个答案:

答案 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"] + ")"