Python 根据其他列中的行值计算dataframe中的行值之间的差异

Python 根据其他列中的行值计算dataframe中的行值之间的差异,python,pandas,Python,Pandas,如何计算每年行值之间的差异,并在年度发生变化时重新开始计算 我有以下数据帧: df = pd.DataFrame({'year': [2010, 2010, 2010, 2011, 2011, 2011], 'measurement1': [1, 3, 5, 2, 3, 6], 'measurement2': [2, 1, 1, 3, 2, 4]}) df_result = pd.DataFrame({'year': [2010, 2

如何计算每年行值之间的差异,并在年度发生变化时重新开始计算

我有以下数据帧:

df = pd.DataFrame({'year': [2010, 2010, 2010, 2011, 2011, 2011],
               'measurement1': [1, 3, 5, 2, 3, 6], 
              'measurement2': [2, 1, 1, 3, 2, 4]})
df_result = pd.DataFrame({'year': [2010, 2010, 2010, 2011, 2011, 2011],
               'measurement1': [0, 2, 2, 0, 1, 3], 
              'measurement2': [0, 1, 0, 0, 1, 2]})
将年份设置为数据框架中的指数,以便计算年份之间的差异。
df=df.set_索引('year')

我希望得到的结果是以下数据帧:

df = pd.DataFrame({'year': [2010, 2010, 2010, 2011, 2011, 2011],
               'measurement1': [1, 3, 5, 2, 3, 6], 
              'measurement2': [2, 1, 1, 3, 2, 4]})
df_result = pd.DataFrame({'year': [2010, 2010, 2010, 2011, 2011, 2011],
               'measurement1': [0, 2, 2, 0, 1, 3], 
              'measurement2': [0, 1, 0, 0, 1, 2]})
您可以看到,每年计算行之间的差异。当我们对新的一年进行测量时,计算又从新开始。如果使用.diff方法,还将计算连续年份值之间的差值

如何计算仅在一年内测量的值之间的差异


非常感谢

使用pandas
groupby
按年份分组,然后应用
diff()


使用pandas
groupby
按年份分组,然后应用
diff()


由于转换并不简单,我将定义一个函数:

def delta(x):
    y = (x.shift().bfill() - x)
    return(np.where(y>=0, y, -y))
然后,
groupby
transform
将对作业执行以下操作:

df = pd.DataFrame({'year': [2010, 2010, 2010, 2011, 2011, 2011],
               'measurement1': [1, 3, 5, 2, 3, 6], 
              'measurement2': [2, 1, 1, 3, 2, 4]}).set_index('year')

df_resul = df.groupby(level=0).transform(delta).astype(int)
它给出:

      measurement1  measurement2
year                            
2010             0             0
2010             2             1

(只需使用
reset\u index
即可获得预期的数据帧)

由于转换并不简单,我将定义一个函数:

def delta(x):
    y = (x.shift().bfill() - x)
    return(np.where(y>=0, y, -y))
然后,
groupby
transform
将对作业执行以下操作:

df = pd.DataFrame({'year': [2010, 2010, 2010, 2011, 2011, 2011],
               'measurement1': [1, 3, 5, 2, 3, 6], 
              'measurement2': [2, 1, 1, 3, 2, 4]}).set_index('year')

df_resul = df.groupby(level=0).transform(delta).astype(int)
它给出:

      measurement1  measurement2
year                            
2010             0             0
2010             2             1
(只需使用
reset_index
即可获得预期的数据帧)