在 pandas python 中水平删除重复项
Drop duplicates horizontal in pandas python
抱歉,我不知道如何删除重复值但水平。函数 drop_duplicate
没有索引参数。
所以我有一个数据框
contact
phone1
phone2
phone3
phone4
1
1234
1234
2
12345
12345
我想要以下数据框:
contact
phone1
phone2
phone3
phone4
1
1234
2
12345
选项 1:可以使用堆栈和重新索引
df.stack().drop_duplicates().unstack().reindex(columns=df.columns).fillna('')
contact phone1 phone2 phone3 phone4
0 1.0 1234.0
1 2.0 12345.0
选项 2:要逐行替换重复项,请先尝试将 NaN 设为 0(df 中不存在的值)。屏蔽重复项并用''填充它们,然后将 0 替换为 NaN 以恢复 df
df.fillna(0).mask(df.apply(lambda x: x.duplicated(), axis=1)).fillna('').replace(0,np.nan)
contact phone1 phone2 phone3 phone4
0 1 1234.0 NaN
1 2 NaN 12345.0
选项 3:
实现你的结果。我们可以:
df.mask(df.apply(lambda x: x.duplicated(), axis=1)).fillna('')
contact phone1 phone2 phone3 phone4
0 1.0 1234.0
1 2.0 12345.0
抱歉,我不知道如何删除重复值但水平。函数 drop_duplicate
没有索引参数。
所以我有一个数据框
contact | phone1 | phone2 | phone3 | phone4 |
---|---|---|---|---|
1 | 1234 | 1234 | ||
2 | 12345 | 12345 |
我想要以下数据框:
contact | phone1 | phone2 | phone3 | phone4 |
---|---|---|---|---|
1 | 1234 | |||
2 | 12345 |
选项 1:可以使用堆栈和重新索引
df.stack().drop_duplicates().unstack().reindex(columns=df.columns).fillna('')
contact phone1 phone2 phone3 phone4
0 1.0 1234.0
1 2.0 12345.0
选项 2:要逐行替换重复项,请先尝试将 NaN 设为 0(df 中不存在的值)。屏蔽重复项并用''填充它们,然后将 0 替换为 NaN 以恢复 df
df.fillna(0).mask(df.apply(lambda x: x.duplicated(), axis=1)).fillna('').replace(0,np.nan)
contact phone1 phone2 phone3 phone4
0 1 1234.0 NaN
1 2 NaN 12345.0
选项 3:
实现你的结果。我们可以:
df.mask(df.apply(lambda x: x.duplicated(), axis=1)).fillna('')
contact phone1 phone2 phone3 phone4
0 1.0 1234.0
1 2.0 12345.0