Рассчитайте разницу последовательно по группам в пандах - PullRequest
1 голос
/ 21 июня 2019

Я пытаюсь вычислить разницу между двумя столбцами последовательно настолько эффективно, насколько это возможно .Мой DataFrame выглядит так:

category   sales   initial_stock
    1        2         20
    1        6         20
    1        1         20
    2        4         30
    2        6         30
    2        5         30
    2        7         30

И я хочу вычислить переменную final_stock, например:

category   sales   initial_stock    final_stock
    1        2         20               18
    1        6         20               12
    1        1         20               11
    2        4         30               26
    2        6         30               20
    2        5         30               15
    2        7         30               8

Таким образом, final_stock сначала равно initial_stock - sales и оно равно final_stock.shift() - sales для каждой категории.Мне удалось сделать это с помощью for петель, но это довольно медленно, и я чувствую, что, возможно, есть один или два линейных решения этой проблемы.У вас есть идеи?

Спасибо

1 Ответ

3 голосов
/ 21 июня 2019

Используйте groupby и cumsum для "продаж", чтобы получить совокупный объем продаж, проданных по категориям, затем вычтите из "initial_stock":

df['final_stock'] = df['initial_stock'] - df.groupby('category')['sales'].cumsum()
df
   category  sales  initial_stock  final_stock
0         1      2             20           18
1         1      6             20           12
2         1      1             20           11
3         2      4             30           26
4         2      6             30           20
5         2      5             30           15
6         2      7             30            8
...