【问题标题】:Remove duplicate rows and keep value in columns that are non-zero删除重复行并保留非零列中的值
【发布时间】:2021-09-24 17:40:44
【问题描述】:

我有一个如下所示的数据框:

ID  |in_tier_1 | tier_1_location |in_tier_2 | tier_2_location
100 |1         |Sydney           |0         | 0
100 |0         |0                |1         | Paris
112 |0         |0                |1         | Paris
112 |1         |NYC              |          | 

我想删除重复项,但保留列中的非零值

ID  |in_tier_1 | tier_1_location |in_tier_2 | tier_2_location
100 |1         |Sydney           |1         | Paris
112 |1         |NYC              |1         | Paris

我尝试通过id 分组并使用.agg() 功能,但没有成功。你能帮忙吗?

【问题讨论】:

    标签: python pandas dataframe group-by


    【解决方案1】:

    按您的 ID 分组并在将 0 和 '0' 替换为 NaN 后回填 NaN,以便更容易回填。然后,因为bfill() 广播回数据帧,所以回到同一键上的另一个分组并选择第一个元素。

    >>> df.replace(0, np.nan).replace('0', np.nan).groupby(level=0).bfill().groupby(level=0).first()
         in_tier_1 tier_1_location  in_tier_2 tier_2_location
    ID                                                       
    100        1.0          Sydney        1.0           Paris
    112        1.0             NYC        1.0           Paris
    

    如果ID 不是您的索引而是一个列,请用groupby('ID') 替换groupby(level=0)(仅在第一个实例中:因为第一个groupby 返回一个带有索引IDdf,您第二次需要使用level=0进行分组,除非你也通过as_index=False)。

    也可以选择ffill 选择last,但这只是镜像对称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      • 2019-10-27
      • 2018-07-27
      • 1970-01-01
      • 2013-07-10
      • 2019-08-12
      • 1970-01-01
      相关资源
      最近更新 更多