在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
代码解释
- 分组计算差值:使用
groupby('Date')按日期分组,通过shift(-1)获取组内下一行数据,与当前行做减法得到差值。 - 列名重命名:将差值列的名称修改为需求指定的格式。
- 合并数据:用
pd.concat将原始DataFrame和差值列横向合并。 - 空值处理:将组内最后一行的空值(
NaN)替换为N/A,匹配预期结果的显示格式。
内容的提问来源于stack exchange,提问作者lucyangharad
相关产品推荐
相关产品推荐

