大熊猫按组依次计算差异

时间:2019-06-20 21:31:00

标签: python pandas time-series pandas-groupby

我正在尝试尽可能高效地依次计算两列之间的差异。我的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 个答案:

答案 0 :(得分:3)

在“销售”中使用groupbycumsum以获取每个类别的累计销售存货,然后从“ 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