Python 熊猫:计算分组中的剩余时间

Python 熊猫:计算分组中的剩余时间,python,pandas,numpy,jupyter-notebook,Python,Pandas,Numpy,Jupyter Notebook,我需要从最早的日期开始按日期对表进行排序。总计字段是通过对名称和种类字段分组并应用总和来创建的。现在,对于每一行,我需要计算相同name-kind分组中的剩余时间 csv如下所示: date name kind duration total remaining 1-1-2017 a 1 10 100 ? should be 90 2-1-2017 b 1 5 35 ? should be 30 3-1-2017

我需要从最早的日期开始按日期对表进行排序。总计字段是通过对
名称
种类
字段分组并应用总和来创建的。现在,对于每一行,我需要计算相同
name-kind
分组中的剩余时间

csv如下所示:

date       name kind duration total remaining
1-1-2017   a    1    10       100   ? should be 90
2-1-2017   b    1    5        35    ? should be 30
3-1-2017   a    2    3        50    ? should be 47
4-1-2017   b    2    1        25    ? should be 24
5-1-2017   a    1    8        100   ? should be 82
6-1-2017   b    1    2        35    ? should be 33
7-1-2017   a    2    3        50    ? should be 44
8-1-2017   b    2    6        25    ? should be 18
...
df['temp'] = df.groupby(['name', 'kind'])['duration'].apply(lambda x: x.shift() + x)
我的问题是如何计算剩余值,同时将
数据帧
名称
种类
分组

我最初的方法是移动列并将值从duration添加到彼此,如下所示:

date       name kind duration total remaining
1-1-2017   a    1    10       100   ? should be 90
2-1-2017   b    1    5        35    ? should be 30
3-1-2017   a    2    3        50    ? should be 47
4-1-2017   b    2    1        25    ? should be 24
5-1-2017   a    1    8        100   ? should be 82
6-1-2017   b    1    2        35    ? should be 33
7-1-2017   a    2    3        50    ? should be 44
8-1-2017   b    2    6        25    ? should be 18
...
df['temp'] = df.groupby(['name', 'kind'])['duration'].apply(lambda x: x.shift() + x)
然后:

df['duration'] = df.apply(lambda x: x['total'] - x['temp'], axis=1)
但它并没有像预期的那样起作用

有没有一种干净的方法可以做到这一点,或者使用
iloc,ix,loc
不知何故是一种方法


谢谢。

您可以执行以下操作:

df["cumsum"] = df.groupby(['name', 'kind'])["duration"].cumsum()
df["remaining"] = df["total"] - df["cumsum"]
可能需要小心重置索引