合并到一行后合并重复的行并删除所有重复的行

时间:2018-01-08 10:03:41

标签: python pandas dataframe data-cleaning

我有一个pandas数据框,其中包含多个重复ID:

 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。

2 个答案:

答案 0 :(得分:3)

您要为True替换'N',为False替换groupby,然后使用any替换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.any

或者,您可以将leveldf.set_index('id').eq('Y').any(level=0).replace({True: 'Y', False: 'N'}) col1 col2 col3 id ENE80R Y N Y 参数一起使用。

angular.extend

答案 1 :(得分:1)

也许是groupby的简单max,因为Y大于N.即

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

      col1 col2 col3
id                   
ENE80R    Y    N    Y

或者谢谢@pirSquared:

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