代码之家  ›  专栏  ›  技术社区  ›  Sean

在一列中查找重复项,比较另一列,修改数据帧中的第三列

  •  0
  • Sean  · 技术社区  · 6 年前

    与其用不可知用例的方式解释这一点,我还不如提供列名称,因为这更清楚了。

    我有三列: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 回复  |  直到 6 年前
        1
  •  2
  •   user3483203    6 年前

    你说总是有两个重复的条目,所以你可以简单地使用 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)
    
        2
  •  2
  •   Sven Harris    6 年前

    你可以找到每个玩家的“最高工资”列,然后你可以匹配索引(当你和玩家的最高工资在同一行时,这将为你提供真实的工资),并更新这些索引的职位字符串值。试试下面的:

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