【问题标题】:Modify duplicated rows in dataframe (Python)修改数据框中的重复行(Python)
【发布时间】:2022-01-27 09:06:34
【问题描述】:

我正在使用 Pandas 中的数据框,我需要一种解决方案来自动修改具有重复值的列之一。它是一个列类型“对象”,我需要修改重复值的名称。数据框如下:

      City           Year       Restaurants
0   New York         2001       20
1      Paris         2000       40
2   New York         1999       41
3   Los Angeles      2004       35
4     Madrid         2001       22
5   New York         1998       33
6   Barcelona        2001       15

如您所见,纽约重复了 3 次。我想创建一个新的数据框,在该数据框中会自动修改此值,结果如下:

      City           Year       Restaurants
0   New York 2001    2001       20
1      Paris         2000       40
2   New York 1999    1999       41
3   Los Angeles      2004       35
4     Madrid         2001       22
5   New York 1998    1998       33
6   Barcelona        2001       15

我也会对“纽约 1”、“纽约 2”和“纽约 3”感到满意。任何选择都会很好。

【问题讨论】:

    标签: python pandas duplicates


    【解决方案1】:

    使用np.where,如果重复,则修改City列

    df['City']=np.where(df['City'].duplicated(keep=False), df['City']+' '+df['Year'].astype(str),df['City'])
    

    【讨论】:

      【解决方案2】:

      不使用numpy 的另一种方法是使用groupby.cumcount(),这将为您提供替代纽约1、纽约2,但适用于所有值。

      df['City'] = df['City'] + ' ' + df.groupby('City').cumcount().add(1).astype(str)
      
                  City  Year  Restaurants
      0     New York 1  2001           20
      1        Paris 1  2000           40
      2     New York 2  1999           41
      3  Los Angeles 1  2004           35
      4       Madrid 1  2001           22
      5     New York 3  1998           33
      6    Barcelona 1  2001           15
      

      要仅在重复的情况下增加,您可以使用loc

      df.loc[df[df.City.duplicated(keep=False)].index, 'City'] = df['City'] + ' ' + df.groupby('City').cumcount().add(1).astype(str)
      
                City  Year  Restaurants
      0   New York 1  2001           20
      1        Paris  2000           40
      2   New York 2  1999           41
      3  Los Angeles  2004           35
      4       Madrid  2001           22
      5   New York 3  1998           33
      6    Barcelona  2001           15
      

      【讨论】:

      • 太棒了,非常感谢!
      猜你喜欢
      • 2022-01-14
      • 2022-06-22
      • 1970-01-01
      • 2020-10-15
      • 1970-01-01
      • 2018-08-21
      • 2013-11-05
      • 2021-05-27
      • 1970-01-01
      相关资源
      最近更新 更多