合并重复行,合并成一行后删除所有重复行

Merge duplicate rows and delete all duplicates after merging into one row

我有一个包含多个重复 ID 的 pandas 数据框:

 id                col1          col2      col3
ENE80R             N             N         Y
ENE80R             N             N         N
ENE80R             Y             N         N

我想要实现的是:

 id                col1          col2      col3
ENE80R              Y             N         Y

我尝试使用 df.drop_duplicates 但它不会将所有 Y 更新到一列中,它只保留第一行并删除重复项。知道我该怎么做吗?

编辑:数据中不仅包含 Y 和 N,还有包含数据以及其他文本和整数数据的列。但是重复数据中唯一不同的数据是 Ys 和 Ns。

您想将 'Y' 替换为 True,将 'N' 替换为 False,然后用 any 执行 groupby。最后,通过反转替换来清理它。

df.replace(dict(Y=True, N=False)) \
  .groupby('id').any() \
  .replace({True: 'Y', False: 'N'})

       col1 col2 col3
id                   
ENE80R    Y    N    Y

或者,您可以使用 pd.DataFrame.anylevel 参数。

df.set_index('id').eq('Y').any(level=0).replace({True: 'Y', False: 'N'})

       col1 col2 col3
id                   
ENE80R    Y    N    Y

可能是 groupby 的简单最大值,因为 Y 大于 N。即

df.groupby('id').max()

      col1 col2 col3
id                   
ENE80R    Y    N    Y

或者感谢@pirSquared:

df.set_index('id').max(level=0)