首页 > 解决方案 > 如何计算分组df的差异?

问题描述

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

标签: pythonpandasnumpy

解决方案


这可以在一行中以矢量化的方式完成。

import pandas as pd

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

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

正如评论中所讨论的,在申请正确替换来自的值时,有必要引用原始'values系列(这发生在每个标签的第一个实例中)。fillnaNaNdiff'name'


推荐阅读