我有一个熊猫数据框。这是前五行:
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
我想按StockCode
和CustomerID
分组,然后求和Quantity
。然后,我想排除所有StockCode
/ CustomerID
对,它们的和为负数。所需的最终产品是原始数据帧,其中删除了与这些StockCode / CustomerID对相对应的行。
我有一个可行的解决方案:
retail_df.groupby(['CustomerID','StockCode']).filter(lambda x: x['Quantity'].sum() >= 0)
但是,我的笔记本电脑需要四分钟才能运行。有406829行。有没有更快的方法?
答案 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)