繁体   English   中英

根据其他列中的行值计算数据框中行值之间的差异

[英]Calculate difference between row values in dataframe based on row value in other column

如何计算每年行值之间的差异,并在年份更改时重新开始计算?

我有以下数据框:

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 = df.set_index('year')

我想得到的结果是以下数据框:

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()

grouped = df.groupby("year").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_index来获取您预期的数据帧)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM