在熊猫中按组顺序计算差异

Posted

技术标签:

【中文标题】在熊猫中按组顺序计算差异【英文标题】:Calculate difference sequentially by groups in pandas 【发布时间】:2019-11-03 18:08:47 【问题描述】:

我正在尝试按顺序尽可能高效地计算两列之间的差异。我的 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】:

在“sales”上使用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

【讨论】:

该死的,这太快了。非常感谢,它就像一个魅力。似乎我仍然可以更高级地使用 groupby

以上是关于在熊猫中按组顺序计算差异的主要内容,如果未能解决你的问题,请参考以下文章

在R中按组计算日期之间的差异

在大熊猫DataFrame中按组删除异常值的更快方法[重复]

熊猫中按组的唯一性索引

如果名称按组的顺序不同,R data.table 分组操作返回错误值?

在 R 中按组转置数据

在熊猫中按一列随机排列行