通过汇总两列来过滤熊猫数据框

时间:2020-01-17 23:34:36

标签: pandas dataframe pandas-groupby

我有一个熊猫数据框。这是前五行:

      InvoiceNo StockCode                          Description  Quantity      InvoiceDate       UnitPrice  CustomerID         Country  
    0    536365    85123A   WHITE HANGING HEART T-LIGHT HOLDER         6   2010-12-01 08:26:00       2.55     17850.0  United Kingdom  
    1    536365     71053                  WHITE METAL LANTERN         6   2010-12-01 08:26:00       3.39     17850.0  United Kingdom
    2    536365    84406B       CREAM CUPID HEARTS COAT HANGER         8   2010-12-01 08:26:00       2.75     17850.0  United Kingdom
    3    536365    84029G  KNITTED UNION FLAG HOT WATER BOTTLE         6   2010-12-01 08:26:00       3.39     17850.0  United Kingdom
    4    536365    84029E       RED WOOLLY HOTTIE WHITE HEART.         6   2010-12-01 08:26:00       3.39     17850.0  United Kingdom

我想按StockCodeCustomerID分组,然后求和Quantity。然后,我想排除所有StockCode / CustomerID对,它们的和为负数。所需的最终产品是原始数据帧,其中删除了与这些StockCode / CustomerID对相对应的行。

我有一个可行的解决方案:

retail_df.groupby(['CustomerID','StockCode']).filter(lambda x: x['Quantity'].sum() >= 0)

但是,我的笔记本电脑需要四分钟才能运行。有406829行。有没有更快的方法?

1 个答案:

答案 0 :(得分:1)

这应该可以解决问题:

df2=retail_df.groupby(['CustomerID','StockCode'])["Quantity"].sum().ge(0)

retail_df=retail_df.set_index(['CustomerID','StockCode']).loc[df2.loc[df2].index].reset_index(drop=False)