【问题标题】:Creating a subset dataset: filter function returned a series but returned scalar bool创建子集数据集:过滤器函数返回一个系列,但返回标量 bool
【发布时间】:2020-03-23 22:47:19
【问题描述】:

我试图创建一个子集 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

我不断收到错误:过滤器函数返回了一个系列,但预期的是一个标量布尔值。对 python 和 pandas 不熟悉,如果有任何帮助,将不胜感激。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

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

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

    如果您在 groupby 之后进行过滤,则它是针对组的过滤器,而不是针对数据的过滤器。因此,它需要每个组的 True 或 False(scalar bool) 值。

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

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

    【讨论】:

    • 我回答你的问题了吗@Ryan Gold?
    【解决方案2】:

    要创建子集,您可以尝试以下方法 -

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

    【讨论】:

    • 感谢您的建议。
    猜你喜欢
    • 2015-01-18
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 1970-01-01
    • 2011-03-25
    相关资源
    最近更新 更多