我有一个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。
答案 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
或者,您可以将level
与df.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)