假设我有这个 Pandas Dataframe df
:
A B
0 100 [2, 18, 20]
1 200 [3, 17]
2 200 [3, 17]
...
其中列 A
的类型为整数,列 B
的类型为整数列表。假设我想计算有多少重复行。在这个 3 行的小示例中,有一个重复行。因此,对于这个小示例,df.duplicate().sum()
应该输出我1
。但不知何故,每当我执行命令时它都会抛出错误:
类型错误:不可散列的类型:“列表”
我理解为什么会发生这种情况是,行中的每个值都成为底层字典的键,并且一个值将计算数据帧中存在多少个这样的键。但由于类型列表不能是字典中的键,所以这会失败。不知道我理解是否正确。
但无论如何,有人知道一种解决方法来查找包含列表列的数据框中有多少重复项吗?以及如何删除它们?
将列表转换为字符串然后删除列表会有帮助吗?虽然我稍后会再次使用该列表,所以当我只有字符串时返回列表可能会很麻烦。任何帮助是极大的赞赏。谢谢。
最佳答案
首先,在系列的单元格中包含一个列表可能不是很酷,会阻碍一些快速计算等。
其次,您可以临时将这些列表转换为可散列的元组、检测重复项并从原始框架中删除。
所以
df.loc[~df.assign(B=df.B.apply(tuple)).duplicated()]
示例运行:
In [561]: df
Out[561]:
A B
0 1 [300]
1 3 [300, 500]
2 1 [300]
3 3 [200, 0]
In [562]: df.assign(B=df.B.apply(tuple))
Out[562]:
A B
0 1 (300,)
1 3 (300, 500)
2 1 (300,)
3 3 (200, 0)
In [563]: df.assign(B=df.B.apply(tuple)).duplicated()
Out[563]:
0 False
1 False
2 True
3 False
dtype: bool
In [564]: df.loc[~df.assign(B=df.B.apply(tuple)).duplicated()]
Out[564]:
A B
0 1 [300]
1 3 [300, 500]
3 3 [200, 0]
关于python - 包含一列列表的 Pandas DataFrame 中的行重复 (Python3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73364140/