Pandas DataFrame中包含一列列表的行重复(Python3)



假设我有这个Pandas数据帧df:

A           B
0  100 [2, 18, 20]
1  200     [3, 17]
2  200     [3, 17]
...   

其中列CCD_ 2是整数类型并且列B是整数列表类型。假设我想数一下有多少重复的行。在这个3行的小示例中,有一行是重复的。所以df.duplicated().sum()应该为这个小例子输出1。但不知何故,每当我执行命令时,它都会抛出一个错误:

TypeError: unhashable type: 'list'

我如何理解为什么会发生这种情况,是因为行中的每个值都成为一个隐藏字典的键,而一个值将计算数据帧中存在多少这样的键。但由于类型列表不能是字典中的键,因此这将失败。不确定我是否理解正确。

但不管怎样,有人知道一种变通方法吗?可以找到在包含列表的列的数据帧中有多少重复项?如何移除它们?

将列表转换为字符串然后删除列表会有帮助吗?虽然我稍后会再次使用该列表,所以当我只有字符串时,返回列表可能会很麻烦。非常感谢您的帮助。非常感谢。

首先,在一个系列的单元格中有一个列表可能不是很酷,会阻碍一些快速计算等。

其次,您可以将这些列表临时强制转换为可哈希的元组,检测重复,并从原始帧中删除。

所以

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]

相关内容

  • 没有找到相关文章

最新更新