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"]
可能需要小心重置索引