如何删除列之间的重复值,而不管它们在 python 或 pyspark 中的顺序如何?

Posted

技术标签:

【中文标题】如何删除列之间的重复值,而不管它们在 python 或 pyspark 中的顺序如何?【英文标题】:How to remove duplicate value among columns irresppective of their order in python or pyspark? 【发布时间】:2018-09-21 21:13:50 【问题描述】:

我有一个数据框,其中列之间有重复值。我只想从数据框中删除所有列共有的值

输入数据帧:

+----------+-----------+------------+
|    A     |    B      |   C        |
+----------+-----------+------------+
|  Food    |   Chill   |  Traveller |
+----------+-----------+------------+
|  Chill   |   Food    |  Chill     |
+----------+-----------+------------+
| Traveller|   Glamour |  Glamour   |
+----------+-----------+------------+
|  Novel   | Traveller |   Party    |
+----------+-----------+------------+
|  Pub     |   Party   |  Driving   |
+----------+-----------+------------+    

输出数据帧:

+----------+-----------+------------+
|    A     |    B      |   C        |
+----------+-----------+------------+
|  Food    |   Party   |  Driving   |
+----------+-----------+------------+
|  Novel   |   Food    |    Party   |
+----------+-----------+------------+
|   Pub    |   Glamour |  Glamour   |
+----------+-----------+------------+

在 python 或 pyspark 中有没有有效的方法来做到这一点?

【问题讨论】:

如果您包含用于实例化数据框的代码会很好,这样我们在演示解决方案时就不必输入它。 可以做到,但这对于 spark 数据框来说并不是一个很好的用途。似乎每列一个数据框会更好。你想做什么?可能有更好的方法。 【参考方案1】:

“数据框”的概念是指采用数组形式的数据结构,其中列之间存在某种关系,而行之间存在另一种关系。在这里,似乎没有跨行的关系:例如,“食物”、“聚会”和“驾驶”彼此没有联系。因此 :dataframe" 概念的适用性有限。您可以像这样创建列表字典:

common = [item for item in df['A'].values if all(item in df[col_name].values for col_name in df.columns)]
unique_elements = col_name:[item for item in df[col_name].values if not item in common] for col_name in df.columns

如果你真的想,你可以用unique_elements 创建一个数据框。

请注意,还有set 数据类型的解决方案,但这会消除多重性(不清楚您想要什么)。

【讨论】:

【参考方案2】:

可以使用set intersectionaggregate

>>> tr = set(df.A.values) & set(df.B.values) & set(df.C.values)
>>> df[~df.isin(tr)].agg(lambda s: s[~pd.isnull(s)].values)

    A       B       C
0   Food    Food    Glamour
1   Novel   Glamour Party
2   Pub     Party   Driving

【讨论】:

以上是关于如何删除列之间的重复值,而不管它们在 python 或 pyspark 中的顺序如何?的主要内容,如果未能解决你的问题,请参考以下文章

使用python返回excel中两个不同文件中两列之间的差异

SQL - 删除两列之间的重复值

Python:在特定列中删除值= 0行[重复]

如何根据两列删除所有重复行?

如何使用隐藏列订购数据表

根据列值删除Python Pandas中的DataFrame行[重复]