DataFrame特定列重复值移除:按指定列匹配规则清理
按指定规则清理DataFrame指定列的重复值
需求说明
- 对DataFrame执行以下去重规则:
- 移除
col2中所有与col1值重复的内容 - 移除
col3中所有与col1、处理后的col2值重复的内容 col4和col5保持原样
- 移除
输入示例
col1 col2 col3 col4 col5 1 12 1 6 2 1 9 1 0 3 1 2 4 9 11 3 10 5 6 4 6 1 3 5
预期输出
col1 col2 col3 col4 col5 1 12 1 6 2 1 0 3 2 4 9 11 3 10 5 4 6 5
解决方案(Pandas实现)
import pandas as pd import numpy as np # 构造输入DataFrame df = pd.DataFrame({ 'col1': [1,2,3,4,5,6], 'col2': [12,1,np.nan,9,6,1], 'col3': [np.nan,9,1,11,np.nan,3], 'col4': [1,1,2,3,4,5], 'col5': [6,0,np.nan,10,np.nan,np.nan] }) # 处理col2:移除与col1重复的值 df['col2'] = df.apply(lambda row: np.nan if row['col2'] == row['col1'] else row['col2'], axis=1) # 处理col3:移除与col1、处理后col2重复的值 df['col3'] = df.apply( lambda row: np.nan if (row['col3'] == row['col1'] or row['col3'] == row['col2']) else row['col3'], axis=1 ) # 按示例格式输出空值 print(df.to_string(na_rep=''))
代码说明
- 用
np.nan标记输入中的空值,构造符合示例的DataFrame - 逐行校验
col2:若值与当前行col1相等,则替换为空值,否则保留原内容 - 逐行校验
col3:若值与当前行col1或处理后的col2相等,则替换为空值,否则保留原内容 - 输出时将
np.nan转为空字符串,匹配示例格式
内容的提问来源于stack exchange,提问作者hardik ramani
相关产品推荐
相关产品推荐

