如何计算每年的行值之间的差,如何在年份更改时重新开始计算?
我有以下数据框:
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方法,则还将计算连续年份之间的差额。
如何计算仅在一年内测得的值之间的差异?
非常感谢!
答案 0 :(得分:2)
使用熊猫groupby
按年份分组,然后应用diff()
grouped = df.groupby("year").diff()
答案 1 :(得分:0)
由于转换并非易事,因此我将定义一个函数:
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
即可获得预期的数据帧)