我有以下类型的数据集
Date ID window var
0 1998-01-28 X -5 8.500e-03
1 1998-01-28 Y -5 1.518e-02
2 1998-01-29 X -4 8.005e-03
3 1998-01-29 Y -4 7.905e-03
4 1998-01-30 X -3 -5.497e-03
... ... ... ...
3339 2016-12-19 Y 3 -4.365e-04
3340 2016-12-20 X 4 3.628e-03
3341 2016-12-20 Y 4 6.608e-03
3342 2016-12-21 X 5 -2.467e-03
3343 2016-12-21 Y 5 -2.651e-03
我的目的是根据变量var
计算变量window
的累积积。这个想法是,对于每个日期,我都确定了一个围绕该日期5天的窗口/变量window
从-5到5)。现在,我要计算属于特定日期的窗口中的累积乘积。例如,第一个日期(1998-01-28)的windows
值为-5,因此代表计算cumprod的起点。我想有一个名为cumprod
的新变量,它在var
为-5的日期正好为window
,那么它是var
值在-5和-4,依此类推,直到window
等于5。这将为第一组日期定义cumprod
的值,其中每个组都由连续日期以{ {1}}从-5到5结束。然后我将在任何日期组重复此操作。因此,我将获得类似
var
在前两个日期中,我以 Date ID window var cumprod
0 1998-01-28 X -5 8.500e-03 8.500e-03
1 1998-01-28 Y -5 1.518e-02 1.518e-02
2 1998-01-29 X -4 8.005e-03 6.80425e-05
3 1998-01-29 Y -4 7.905e-03 0.00011999790000000002
4 1998-01-30 X -3 -5.497e-03
... ... ... ...
3339 2016-12-19 Y 3 -4.365e-04
3340 2016-12-20 X 4 3.628e-03
3341 2016-12-20 Y 4 6.608e-03
3342 2016-12-21 X 5 -2.467e-03
3343 2016-12-21 Y 5 -2.651e-03
为例。
我该如何实现?我在想找到一种将标识符附加到每组日期的方法,然后使用cumprod
运行某种cumprod()
方法。我想不出该怎么做。通过在窗口上使用.groupby(group_identifier)
函数可以简化它吗?任何其他方法都非常受欢迎。
答案 0 :(得分:1)
我建议以下
if (fork() == 0) {
printf("First child process\n");
if (fork() != 0)
printf("First child process (parent part)\n");
/*
else
printf("Grandchild\n");
// fall through for both first child and grandchild
*/
}
// Main process, and first child, and grandchild
if (fork() != 0) {
// also first child and grandchild ("parent" part)
printf("Main process (parent part)\n");
if (fork() == 0)
// also third grandchild, and second great-grandchild
printf("Third child process\n");
}
/*
else
// also second grandchild, and first great-grandchild
printf("Main process, second child\n");
*/
我的import numpy as np
import pandas as pd
np.random.seed(123)
df = pd.DataFrame({"Date": pd.date_range("1998-01-28", freq="d", periods=22),
"window": np.concatenate([np.arange(-5,6,1),np.arange(-5,6,1)]),
"var": np.random.randint(1,10,22)
})
与您的相似:
df
然后我创建一个分组变量并使用 Date window var
0 1998-01-28 -5 3
1 1998-01-29 -4 3
2 1998-01-30 -3 7
3 1998-01-31 -2 2
4 1998-02-01 -1 4
5 1998-02-02 0 7
6 1998-02-03 1 2
7 1998-02-04 2 1
8 1998-02-05 3 2
9 1998-02-06 4 1
10 1998-02-07 5 1
11 1998-02-08 -5 4
12 1998-02-09 -4 5
转换var:
cumprod
结果是:
df = df.sort_values("Date") # My df is already sorted by Date given the way
# I created it, but I add this to make sure yours is sorted by date
df["group"] = (df["window"] == -5).cumsum()
df = pd.concat([df, df.groupby("group")["var"].transform("cumprod")], axis=1)