我要求从最早的日期开始按日期对表格进行排序。通过对name
和kind
字段进行分组并应用sum来创建总字段。现在,对于每一行,我需要计算同一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
...
我的问题是如何在按DataFrame
和name
分组kind
的同时计算剩余价值?
我最初的方法是移动列并将持续时间的值添加到彼此:
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
以某种方式去做?
感谢。
答案 0 :(得分:1)
您可以执行以下操作:
df["cumsum"] = df.groupby(['name', 'kind'])["duration"].cumsum()
df["remaining"] = df["total"] - df["cumsum"]
小心重置索引可能。