在python或pyspark中,如何删除不受顺序影响的列之间的重复值?

2024-09-29 00:23:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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

输入数据帧:

+----------+-----------+------------+
|    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中有什么有效的方法可以做到这一点吗?你知道吗


Tags: 数据方法dataframefoodpartypysparkpubdriving
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

“dataframe”的概念是指采用数组形式的数据结构,其中列之间存在某种关系,行之间存在另一种关系。在这里,似乎没有一个关系跨越一排:“食物”,“聚会”,和“驾驶”,例如,是没有联系的。因此: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数据类型的解决方案,但这将消除多重性(不清楚您想要什么)。你知道吗

相关问题 更多 >