Python 创建子集数据集:filter函数返回一个系列,但返回标量bool

Python 创建子集数据集:filter函数返回一个系列,但返回标量bool,python,pandas,Python,Pandas,我试图创建一个子集df,过滤掉所有绝对值['Invoice Amount']>1000 abs_filter = lambda subset: subset['Invoice Amount'].abs() < 1000 filter_df2 = df.groupby( ['year', 'month','Unit','Name']).filter(lambda grp: abs_filter(grp)) filter_df2 abs\u filter=lamb

我试图创建一个子集df,过滤掉所有绝对值['Invoice Amount']>1000

abs_filter = lambda subset: subset['Invoice Amount'].abs() < 1000
filter_df2 = df.groupby(
              ['year', 'month','Unit','Name']).filter(lambda grp: abs_filter(grp))
filter_df2
abs\u filter=lambda子集:子集['Invoice Amount'].abs()<1000
筛选器_df2=df.groupby(
['year'、'month'、'Unit'、'Name'])。过滤器(lambda grp:abs_过滤器(grp))
滤波器df2

我不断遇到错误:filter函数返回了一个序列,但需要一个标量bool。python和pandas新手,非常感谢您的帮助。

为什么不过滤然后分组?更好

df[df['Invoice Amount'].abs() < 1000].groupby(['year', 'month','Unit','Name'])
df[df['Invoice Amount'].abs()<1000].groupby(['year','month','Unit','Name'])
如果在groupby之后进行筛选,则它是组的筛选,而不是数据的筛选。因此,它要求每个组的值为True或False(标量bool)

根据你的问题,如果你只需要一个过滤子集,为什么还要groupby,比如

df[df['Invoice Amount'].abs() < 1000, ['year', 'month','Unit','Name']]
df[df['Invoice Amount'].abs()<1000,['year','month','Unit','Name']]

要创建子集,可以尝试以下操作-

df_subset = df[df['Invoice Amount'].abs() < 1000]
df_subset=df[df['Invoice Amount'].abs()<1000]

谢谢你的建议。我是否回答了你的问题@Ryan Gold?