【发布时间】:2013-07-30 19:47:46
【问题描述】:
使用 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!
编辑:
我也尝试使用transform(),而不是使用apply(),但是这给了我错误:AttributeError: 'int' object has no attribute 'ndim'。非常感谢您解释为什么每个函数的错误不同!
另外,我想保留上面示例中 ID = 3 的所有行。
提前致谢, 马蒂斯
【问题讨论】:
标签: python python-3.x pandas