如何在Pandas中查找并动态移除全量重复列?
在Pandas中移除值完全重复的列(含列名重复/不同但值一致的情况)
要动态移除DataFrame中所有记录值完全相同的重复列,同时保留首次出现的列,可以通过以下步骤实现:
核心思路
将DataFrame转置,把列转换为行,这样就能用duplicated()方法识别值完全一致的行(即原数据中的重复列),最后筛选出非重复的列即可。这个方法同时覆盖两种场景:
- 列名完全重复且值一致的列
- 列名不同但所有记录值完全一致的列
代码实现
1. 构造示例数据
import pandas as pd data = { 'Id': [1, 2, 3, 4, 5], 'ProductName': ['Shoes', 'Bag', 'Laptop', 'Shoes', 'Laptop'], 'ProductSize': ['9', 'XL', '16INCH', '9', '14INCH'], 'ProductSize': ['9', 'XL', '16INCH', '9', '14INCH'], 'ProductDesc': ['Shoes', 'Bag', 'Laptop', 'Shoes', 'Laptop'], 'Quantity': [143, 342, 452, 143, 452], 'SoldCount': [143, 342, 452, 143, 452], 'Sales': [6374, 2839, 8293, 3662, 7263] } df = pd.DataFrame(data)
2. 移除重复列
# 转置后标记重复列,保留首次出现的列 df_output = df.loc[:, ~df.T.duplicated(keep='first')] print(df_output)
输出结果
Id ProductName ProductSize Quantity Sales 0 1 Shoes 9 143 6374 1 2 Bag XL 342 2839 2 3 Laptop 16INCH 452 8293 3 4 Shoes 9 143 3662 4 5 Laptop 14INCH 452 7263
代码解释
df.T:将DataFrame转置,把原有的列转换为行,行转换为列。duplicated(keep='first'):标记转置后重复的行(对应原数据中的重复列),keep='first'表示保留首次出现的列,后续重复列标记为True。~:对布尔值取反,得到需要保留的列的索引。df.loc[:, ...]:根据筛选出的索引保留对应列,生成去重后的DataFrame。
内容的提问来源于stack exchange,提问作者Nason Thomas
相关产品推荐
相关产品推荐

