У меня есть pandas фрейм данных. Вот первые пять строк:
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 строк. Есть ли более быстрый способ?