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年的日期,因此它找不到任何通用值。