合并重复行,合并成一行后删除所有重复行
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.any
和 level
参数。
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)
我有一个包含多个重复 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.any
和 level
参数。
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)