值未在数据框中返回

时间:2015-07-30 00:16:45

标签: python

我正在尝试删除带有'计数'我的数据框中的值小于10。我的数据框目前看起来像这样:

    person  id     count
0   p1  760431192   20
1   p2  101663519   1
2   p3  325694288   2
3   p4  338468584   1
4   p5  2337087786  18

我将count列与基于id列的df.merge函数合并:

df = df.merge(dframe, on='id', how='left')

所以当我尝试删除带有计数的行时< 10,我收到以下错误:

df = df[df.count>=10]
KeyError: True

但是,当我在任何其他列上使用相同的代码时,请说:

df = df[df.id==760431192]
df = df[df.person==p2]

代码完美运行,我得到了我期待的数据帧。知道为什么代码没有在合并列上工作' count'?

2 个答案:

答案 0 :(得分:1)

df.count不是专栏,而是方法 DataFrame.count。因此,您不是要将数据帧与数字进行比较(给出元素布尔结果),而是将方法与数字进行比较,这是没有规则的。在Python 2中,当没有比较规则时,它会回退到默认的“任意但一致”的规则,它给出了一个布尔答案。

在Python 3中,该默认规则已被删除,您获得的错误可让您更好地了解正在发生的事情:

>>> df.count >= 10
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: method() >= int()

无论如何,解决方案是将该列改为df['count']

>>> df[df['count'] >= 10]
  person          id  count
0     p1   760431192     20
4     p5  2337087786     18

答案 1 :(得分:0)

将唯一商品计数添加回原始DataFrame的另一种方法是将groupbytransform一起使用:

df['count'] = df.groupby('id').transform('count')

您现在可以过滤掉小于10的行:

df = df[df['count'] >= 10]