如何实现每两行分组计算行差并跳行填充结果?
实现跳行式连续行对差值计算
需要计算每一对连续行的差值,且实现“跳行”效果——仅处理第0&1行、第2&3行这样的两两分组,计算每组内第一行减第二行的差值,其余行填充NaN。目标输出如下:
a output 0 5 -3 1 8 nan 2 2 -2 3 4 nan
注:目标差值为5-8=-3和2-4=-2
你尝试的代码df['output'] = df['C'] - df['C'].shift(-1)会计算每一行与下一行的差值,无法实现分组跳行的效果,可通过以下方式解决:
解决方案
利用行索引分组,每两行分为一组,在组内计算指定差值后,仅保留每组第一行的结果:
import pandas as pd # 构造示例数据 df = pd.DataFrame({'a': [5, 8, 2, 4]}) # 按行索引整除2进行分组,每两行一组 groups = df.groupby(df.index // 2) # 对每组计算第一行减第二行的差值,映射回原数据 df['output'] = groups['a'].transform(lambda x: x.iloc[0] - x.iloc[1] if len(x) == 2 else None) # 仅保留每组第一行的结果,其余行设为NaN df['output'] = df['output'].where(df.index % 2 == 0, None)
执行后得到的结果符合需求:
a output 0 5 -3.0 1 8 NaN 2 2 -2.0 3 4 NaN
如果需要将差值放在每组的第二行,只需调整where的条件为df.index % 2 == 1即可。
内容的提问来源于stack exchange,提问作者gotiredofcoding
相关产品推荐
相关产品推荐

