根据列值进行拟合后的Pandas Groupby

时间:2019-11-06 07:54:44

标签: python-3.x pandas dataframe aggregate

嗨,我正在尝试根据三列进行分组,然后对第四列进行汇总/求和。我只想知道Mo_Year列(浮点数)是10.2019、11.2019和12.2019并汇总最后一列的金额之和。 我尝试使用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())                                                                                                                                                   

有人可以帮忙吗?谢谢。

1 个答案:

答案 0 :(得分:2)

首先,如果选中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])]