繁体   English   中英

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

[英]Row duplicates in a Pandas DataFrame containing a column of lists (Python3)

假设我有这个 Pandas Dataframe df

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

其中A列是 integer 类型, B列是整数列表类型。 假设我想计算有多少重复行。 在这个 3 行的小例子中,有一个重复的行。 所以df.duplicated().sum()应该 output me 1对于这个小例子。 但不知何故,每当我执行命令时它都会抛出一个错误:

TypeError: unhashable type: 'list'

我如何理解为什么会发生这种情况是行中的每个值都成为引擎盖下字典的键,并且一个值将计算 dataframe 中存在多少这样的键。 但是由于类型列表不能是字典中的键,所以这会失败。 不确定我是否理解正确。

但无论如何,有没有人知道一种解决方法来查找包含有列表的列的 dataframe 中有多少重复项? 以及如何删除它们?

将列表转换为字符串然后删除列表有帮助吗? 虽然我稍后会再次使用该列表,但当我只有字符串时,这可能会给 go 回到列表带来麻烦。 任何帮助是极大的赞赏。 谢谢你。

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

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

所以

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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM