如何基于列值删除Pandas DataFrame中列名不同的重复列
解决Pandas DataFrame删除值重复(列名不同)列的问题
要处理这类列名不同但值完全重复的列,核心思路是基于列的内容而非列名来检测重复,可以通过转置DataFrame后使用duplicated()方法实现,具体步骤如下:
示例代码
先构造符合需求的测试DataFrame:
import pandas as pd # 构造原DataFrame data = { 'col1': [1, 2, 3, 4], 'col2': ['a', 'b', 'c', 'd'], 'col3': [1, 2, 3, 4], # 和col1值完全一致 'col4': ['a', 'b', 'c', 'd'], # 和col2值完全一致 'col5': [True, False, True, False] } DF = pd.DataFrame(data)
接下来执行去重操作:
# 转置后检测重复行(对应原DataFrame的重复列),保留每组重复中的第一个 DF_new = DF.loc[:, ~DF.T.duplicated()]
结果验证
输出DF_new会得到只包含col1、col2、col5的DataFrame,完全符合需求。
原理说明
DF.T将原DataFrame转置,此时原有的列变成行,列的内容变成行的内容duplicated()会标记出重复的行(即原DataFrame中值重复的列),默认保留第一个出现的行,标记后续重复行为True~对布尔结果取反,得到需要保留的列的索引,再通过loc[:, ...]筛选出目标列
内容的提问来源于stack exchange,提问作者Benvenuto
相关产品推荐
相关产品推荐

