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

标签 python python-3.x pandas dataframe

假设我有这个 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/

相关文章:

python - 如何从 numpy.datetime64 获取 unix 时间戳

python-3.x - 我如何使用 tf.keras.utils.get_file 加载图像数据集

python - 打印 [Python] 在 Pycharm 中被视为关键字

python - 两个带有非唯一标签的 Pandas 系列的操作行为是什么?

python - 按列计算时差 Pandas

python - Pandas DataFrame 在 Groupby 两列之后找到最大值并获取计数

python - 如何从顶点列表在 SymPy 中制作多边形

python - 使用 FB Messenger 和 Django 的 Echo 机器人

Python 数据帧 : Seperate rows based on custom condition?

python - 如何为图例的个体值设置独特的颜色