You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中为指定日期分组计算列差值并新增结果列

按分组计算行间差值并生成新列

原始DataFrame

import pandas as pd

data = {
    'Date': ['1997Q1', '1997Q1', '1997Q1', '1997Q2', '1997Q2', '1997Q2', '1997Q3', '1997Q3'],
    'Value1': [100, 100, 120, 180, 186, 186, 190, 192],
    'Value 2': [130, 130, 136, 145, 134, 124, 143, 143],
    'Value 3': [120, 124, 154, 154, 126, 176, 176, 123]
}
df = pd.DataFrame(data)

需求说明

按Date字段分组,对每个Value列计算组内当前行与下一行的差值,新增Diff Val 1、Diff Val 2、Diff Val 3列存储对应差值,组内最后一行的差值标记为N/A。

解决方案代码

# 按Date分组,计算每行与下一行的差值
diff_cols = df.groupby('Date')[['Value1', 'Value 2', 'Value 3']].apply(lambda x: x.shift(-1) - x)

# 重命名差值列以匹配需求
diff_cols.columns = ['Diff Val 1', 'Diff Val 2', 'Diff Val 3']

# 合并原数据与差值列
result = pd.concat([df, diff_cols], axis=1)

# 将空值替换为N/A
result = result.fillna('N/A')

print(result)

输出结果

Date  Value1  Value 2  Value 3 Diff Val 1 Diff Val 2 Diff Val 3
0  1997Q1     100      130      120          0          0          4
1  1997Q1     100      130      124         20          6         30
2  1997Q1     120      136      154        N/A        N/A        N/A
3  1997Q2     180      145      154          6        -11        -28
4  1997Q2     186      134      126          0         10         50
5  1997Q2     186      124      176        N/A        N/A        N/A
6  1997Q3     190      143      176          2          0        -53
7  1997Q3     192      143      123        N/A        N/A        N/A

代码解释

  1. 分组计算差值:使用groupby('Date')按日期分组,通过shift(-1)获取组内下一行数据,与当前行做减法得到差值。
  2. 列名重命名:将差值列的名称修改为需求指定的格式。
  3. 合并数据:用pd.concat将原始DataFrame和差值列横向合并。
  4. 空值处理:将组内最后一行的空值(NaN)替换为N/A,匹配预期结果的显示格式。

内容的提问来源于stack exchange,提问作者lucyangharad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 23:54:05