Pandas按ID分组基于Value列计算Final_Value列的实现方法
Pandas实现分组计算Final_Value的方法
你可以用groupby配合shift方法实现需求,核心逻辑是利用shift(-1)取同组下一行的Value做差值,最后把每组最后一行的缺失值替换为自身Value即可。
完整实现代码
1. 构造示例数据
import pandas as pd data = { 'ID': [9560, 9560, 9712, 9712, 9920], 'Date': ['07/03/2021', '03/03/2021', '12/15/2021', '08/30/2021', '04/11/2021'], 'Value': [25, 20, 15, 10, 5] } df = pd.DataFrame(data)
2. 核心计算逻辑
如果你的数据已经按分组内需要的顺序排好,可以直接执行以下代码:
# 计算当前行与同组下一行的Value差值 df['Final_Value'] = df['Value'] - df.groupby('ID')['Value'].shift(-1) # 每组最后一行的差值为NaN,替换为自身Value df['Final_Value'] = df['Final_Value'].fillna(df['Value']).astype(int)
3. 可选:分组内按日期排序
如果需要先按日期倒序排列同组的行,先执行排序逻辑再做计算:
# 转换日期格式 df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%Y') # 按ID升序、日期降序排序 df = df.sort_values(['ID', 'Date'], ascending=[True, False]).reset_index(drop=True)
输出结果验证
运行后得到的df和预期结果完全一致:
ID Date Value Final_Value 0 9560 2021-07-03 25 5 1 9560 2021-03-03 20 20 2 9712 2021-12-15 15 5 3 9712 2021-08-30 10 10 4 9920 2021-04-11 5 5
内容的提问来源于stack exchange,提问作者Sriram
相关产品推荐
相关产品推荐

