Skip to main content
 首页 » 编程设计

python之如何计算分组 df 的差异

2025年05月04日22zengkefu

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 

请您参考如下方法:

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

import pandas as pd 
 
df = pd.read_clipboard() # Reading from your question 
 
df['value'] = df.groupby('name')['value'].diff(1).fillna(df['value']) 

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