pandas - ( Pandas )根据顺序无关紧要的子集删除重复项

标签 pandas

从这个 df 去的正确方法是什么:

>>> df=pd.DataFrame({'a':['jeff','bob','jill'], 'b':['bob','jeff','mike']})
>>> df
      a     b
0  jeff   bob
1   bob  jeff
2  jill  mike

对此:
>>> df2
      a     b
0  jeff   bob
2  jill  mike

根据“a”和“b”中的项目删除重复的行,而不考虑它们的特定列。

我可以使用 lambda 表达式组合一个解决方案来创建掩码,然后根据掩码列删除重复项,但我认为必须有比这更简单的方法:
>>> df['c'] = df[['a', 'b']].apply(lambda x: ''.join(sorted((x[0], x[1]), \
 key=lambda x: x[0]) + sorted((x[0], x[1]), key=lambda x: x[1] )), axis=1)
>>> df.drop_duplicates(subset='c', keep='first', inplace=True)
>>> df = df.iloc[:,:-1]

最佳答案

我认为您可以独立对每一行进行排序,然后使用重复来查看要删除哪些行。

dupes = df.apply(lambda x: x.sort_values().values, axis=1).duplicated()
df[~dupes]

一种更快的获得欺骗的方法。感谢@DSM。
dupes = df.T.apply(sorted).T.duplicated()

关于pandas - ( Pandas )根据顺序无关紧要的子集删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44792969/

相关文章:

pandas - 如何使每个列从单独的文件合并到彼此相邻而不是在每个 df 下排列?

python - 将类别列表打印为一列

python - 将 pandas 数据框渲染为 html,突出显示特定元素

python - 从数组创建 Pandas 数据框

python - 使用 numpy 和 pandas 如何计算百分比并使用标准并给它负号

python - 在 pandas MultiIndex 数据框中旋转数据

python-3.x - 使用另一个数据框列值的 Pandas 数据框列扩展

python - 如何避免 pandas 在保存的 csv 中创建索引

python - Pandas 首次发货后 3 天内累计发货的单位数

python - 从 pandas 数据帧的所有列和行中删除值