嗨,我正在尝试根据三列进行分组,然后对第四列进行汇总/求和。我只想知道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())
有人可以帮忙吗?谢谢。
答案 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])]