如何计算分组df的差异?

时间:2019-01-29 21:32:54

标签: python pandas numpy

name      date      value
 a      1/1/2011      3
 b      1/1/2011      5
 c      1/1/2011      7
 a      1/2/2011      6
 b      1/2/2011      10
 c      1/2/2011      14

我在这里有一个df,其中的值是累积统计信息。因此,name: a date: 1/2/2011的实际值是3而不是6。要获取特定日期的实际值,我需要将当天的值减去前一天的值。我想计算每个日期每个名称的实际值。与df.groupby(['name', 'date'])['value'].diff()相似,但此代码返回错误。

最后我需要的是

name      date   actual value
 a      1/1/2011      3
 b      1/1/2011      5
 c      1/1/2011      7
 a      1/2/2011      3
 b      1/2/2011      5
 c      1/2/2011      7

2 个答案:

答案 0 :(得分:3)

这可以单行且矢量化的方式完成。

import pandas as pd

df = pd.read_clipboard() # Reading from your question

df['value'] = df.groupby('name')['value'].diff(1).fillna(df['value'])

正如评论中所讨论的那样,在应用'values来正确替换fillna中的NaN值时,有必要参考原始的diff系列(这种情况发生在'name'中每个标签的第一个实例。

答案 1 :(得分:2)

/**
 * on after content init lifecycle hook
 */
ngAfterContentInit() : void {
    this.froalaEditor.markAsPristine();
    this.froalaEditor.markAsUntouched();
}