[英]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.