如何按分组ID计算数据集中每行与前一行的权重差值?求实现代码
按分组ID计算每行与下一行的权重差值
根据你的需求,我们需要针对每个ID分组,计算当前行权重与下一行权重的差值(即当前行Wt - 下一行Wt),并且每组的最后一行不需要显示差值。下面提供基于Python pandas的实现方案,这是处理这类分组数据计算最常用的工具。
步骤说明
- 导入pandas库并构造示例数据集
- 按
ID分组,对每个分组内的Wt列执行向下偏移一行的操作(获取下一行的权重值) - 计算当前行
Wt与偏移后值的差值,得到diff列 - 由于每组最后一行没有下一行,对应的
diff会是NaN,可以选择保留或转为空值以匹配你的示例格式
代码实现
import pandas as pd # 构造你的示例数据集 data = { 'ID': [1, 1, 1, 2, 2, 2], 'Wt': [60.5, 58, 62, 89, 75, 72] } df = pd.DataFrame(data) # 按ID分组,计算当前行与下一行的权重差值 df['diff'] = df.groupby('ID')['Wt'].apply(lambda x: x - x.shift(-1)) # 将NaN转为空字符串,和示例格式完全对齐 df['diff'] = df['diff'].where(df['diff'].notna(), '') print(df)
运行结果
执行代码后会得到和你预期完全一致的输出:
ID Wt diff 0 1 60.5 2.5 1 1 58.0 -4.0 2 1 62.0 3 2 89.0 14.0 4 2 75.0 3.0 5 2 72.0
补充提示
如果后续你的需求调整为当前行相对于前一行的差值(即当前行Wt - 前一行Wt),只需要把代码中的x.shift(-1)改成x.shift(1)即可。如果你的数据集是从CSV/Excel文件读取的,直接用pd.read_csv()或pd.read_excel()替换构造数据集的部分即可适配。
内容的提问来源于stack exchange,提问作者Jammy
相关产品推荐
相关产品推荐

