使用 Python 3.3 和 Pandas 0.10
我有一个由连接多个 CSV 文件构建的 DataFrame。首先,我过滤掉 Name 列中包含某个字符串的所有值。结果看起来像这样(为简洁起见缩短,实际上有更多列):
Name ID
'A' 1
'B' 2
'C' 3
'C' 3
'E' 4
'F' 4
... ...
现在我的问题是我想删除“重复”值的特殊情况。我想删除映射到此 ID 的相应名称值不相似的所有 ID 重复项(实际上是整行)。在上面的示例中,我想保留 ID 为 1、2 和 3 的行。其中 ID=4 的 Name 值不相等,我想删除它们。
我尝试使用以下代码行(基于此处的建议:Python Pandas: remove entries based on the number of occurrences)。
代码:
df[df.groupby('ID').apply(lambda g: len({x for x in g['Name']})) == 1]
但是,这给了我错误:
ValueError: Item wrong length 51906 instead of 109565!
编辑:
而不是使用apply()
我也尝试过使用transform()
,但是这给了我错误:AttributeError: 'int' object has no attribute 'ndim'
. 非常感谢解释为什么每个函数的错误不同!
另外,我想保留上面示例中 ID = 3 的所有行。
在此先感谢,马蒂斯