Python 计算时间序列中的日常变化

Python 计算时间序列中的日常变化,python,r,pandas,merge,Python,R,Pandas,Merge,我有一个时间序列df1df2根据两个日期之间的df1指示开始和停止日期以及值中的差异。除了日期之间的最终差异(如df2所示),我还想找出开始和停止之间的日常差异。 有人知道从哪里开始吗?我开始使用R中的merge来组合df1和df2,但之后我陷入了困境 df1 Date Value 20120509 1018.53 20120510 1026.5 20120511 1032.41 20120514 1004.87 20120515 9

我有一个时间序列
df1
df2
根据两个日期之间的
df1
指示
开始
停止
日期以及
值中的
差异
。除了日期之间的最终差异(如
df2
所示),我还想找出开始和停止之间的日常差异。 有人知道从哪里开始吗?我开始使用
R
中的
merge
来组合
df1
df2
,但之后我陷入了困境

df1

Date        Value   
20120509    1018.53 
20120510    1026.5  
20120511    1032.41 
20120514    1004.87 
20120515    999.22  
20120516    986.94  
20120518    955.98  
df2

预期结果:

Date        Value   ChangeOverTime
20120509    1018.53 0
20120510    1026.5  7.97
20120511    1032.41 13.88
20120514    1004.87 -13.66
20120515    999.22  0
20120516    986.94  -12.28
20120518    955.98  -43.24

你可以这样做。只要日期列按升序排列,它就可以工作。它通过检查
df2$Start
中的日期来创建一个分组变量,然后为每个组创建一个累积的差异总和,
unlist
将它们放入一个向量中

df1$Change <- unlist(tapply(df1$Value, 
                            cumsum(df1$Date %in% df2$Start), 
                            function(x) cumsum(c(0, diff(x)))))

df1
      Date   Value Change
1 20120509 1018.53   0.00
2 20120510 1026.50   7.97
3 20120511 1032.41  13.88
4 20120514 1004.87 -13.66
5 20120515  999.22   0.00
6 20120516  986.94 -12.28
7 20120518  955.98 -43.24

df1$Change您可以这样做。只要日期列按升序排列,它就可以工作。它通过检查
df2$Start
中的日期来创建一个分组变量,然后为每个组创建一个累积的差异总和,
unlist
将它们放入一个向量中

df1$Change <- unlist(tapply(df1$Value, 
                            cumsum(df1$Date %in% df2$Start), 
                            function(x) cumsum(c(0, diff(x)))))

df1
      Date   Value Change
1 20120509 1018.53   0.00
2 20120510 1026.50   7.97
3 20120511 1032.41  13.88
4 20120514 1004.87 -13.66
5 20120515  999.22   0.00
6 20120516  986.94 -12.28
7 20120518  955.98 -43.24

df1$Change使用dplyr lag函数计算一行与前一行之间的差异

我尚未测试以下代码:

library(dplyr)

df1 %>%
    mutate(ChangeOverTime = value - lag(value,1, default = 0.0))

但有些日期缺失,例如20120512。你必须考虑你如何处理它们

使用dplyr lag函数计算一行与前一行之间的差异

我尚未测试以下代码:

library(dplyr)

df1 %>%
    mutate(ChangeOverTime = value - lag(value,1, default = 0.0))

但有些日期缺失,例如20120512。你必须考虑你如何处理它们

预期输出是什么?在我的示例中是一个类似于“out”的数据帧。预期输出是什么?在我的示例中是一个类似于“out”的数据帧。20120512不是一个真实的日期,这就是它丢失的原因。20120512不是一个真实的日期,这就是它丢失的原因。您好,我没有获得预期的输出。你能试试我更新的df2吗?PS:请注意,我将“差值”乘以100,然后再减去60,以类似于我的真实数据。您的新的
df2
中没有任何2012年的日期,因此找不到任何通用值。您好,我没有得到预期的输出。你能试试我更新的df2吗?PS:请注意,我将“差值”乘以100,然后再减去60,以类似于我的真实数据。您的新的
df2
中没有任何2012年的日期,因此它找不到任何通用值。