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

时间:2017-12-05 01:41:04

标签: python pandas numpy jupyter-notebook

我要求从最早的日期开始按日期对表格进行排序。通过对namekind字段进行分组并应用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
...

我的问题是如何在按DataFramename分组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以某种方式去做?

感谢。

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

df["cumsum"] = df.groupby(['name', 'kind'])["duration"].cumsum()
df["remaining"] = df["total"] - df["cumsum"]

小心重置索引可能。