【问题标题】:Pandas Groupby after fitering based on column values基于列值过滤后的 Pandas Groupby
【发布时间】:2019-11-06 07:54:44
【问题描述】:

您好,我正在尝试根据三列进行分组,然后对第四列进行聚合/总和。我只对 Mo_Year 列(float)为 10.2019、11.2019 和 12.2019 感兴趣并汇总最后一列 Amount 的总和。 我尝试使用 goupby 进行过滤,如下所述。 Mo_Year 的过滤没有发生。

示例数据集如下

    Name  Mo_Year    Item  Amount
    A1    10.2019    cat     60
    A2    1.2019     dog     40
    A3    12.2019    cat     10  
    A4    3.2019     dog     30
    A5    4.2019     cat     10
    A1    10.2019    dog     50
    A2    11.2019    cat     30
    A3    3.2019     cat     20
    A4    10.2019    dog     10
    A5    11.2019    cat     70
df_test = df1.groupby(['Name','Mo_Year', 'Item']).filter(lambda x: (x['Mo_Year'] == 10.2019).any() & (x['Mo_Year'] == 12.2019).any())                                                                                                                                                   

有人可以帮忙吗?谢谢。

【问题讨论】:

  • 预期输出是什么?
  • Mo_Year 是浮点型。
  • 好的,你能补充一下最终数据框的外观吗?
  • 对不起,我刚刚编辑了我的 Header ``` Name Mo_Year Item Amount```

标签: python-3.x pandas dataframe aggregate


【解决方案1】:

首先如果检查filtration,它的工作方式不同。

返回分组中的所有数据,如果匹配条件,则删除分组中的所有数据。


如果值为浮点数,需要将&改为or

df_test=(df1.groupby(['Name','Mo_Year', 'Item'])
            .filter(lambda x: (x['Mo_Year'] == 10.2019).any() or 
                              (x['Mo_Year'] == 12.2019).any()))

或:

df_test=(df1.groupby(['Name','Mo_Year', 'Item'])
            .filter(lambda x: (x['Mo_Year'].isin([10.2019,11.2019,12.2009]).any())

但也许groupby应该被省略,如果只需要按条件过滤:

df= df[df['Mo_Year'].isin([10.2019,11.2019,12.2009])]

【讨论】:

  • 我的愚蠢错误是添加&。我改为或。由于它是浮点类型,因此我尝试了您的第一个建议。但最终数据框包含所有行。没有进行过滤。
  • @Lilly - 这是预期的,因为这里的过滤器意味着 - 如果匹配条件,则返回所有组。因此,如果至少有一个值匹配,则返回组中的所有数据。也许需要最后的建议
  • 好的,谢谢。说得通。我正在尝试最后一个选项先过滤然后分组。但即使在这种情况下,也只会显示第一个数字。就像我只能看到 10.2019 数据而不是其他数据一样。
  • @Lilly - 你的代码是什么?预期输出如何?
  • 哎呀。再次对不起我的错误。我不得不将 2009 年更正到 2019 年。剪切和粘贴问题。感谢并感谢您的时间df= df[df['Mo_Year'].isin([10.2019,11.2019,12.2019])] 作品。我将在过滤后的 df 上添加 groupby 条件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
相关资源
最近更新 更多