我正在尝试删除带有'计数'我的数据框中的值小于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'?
答案 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的另一种方法是将groupby
与transform
一起使用:
df['count'] = df.groupby('id').transform('count')
您现在可以过滤掉小于10的行:
df = df[df['count'] >= 10]