'Fill forward' 同一组观察值的虚拟变量 (Python)
'Fill forward' dummy variable for observations in same group (Python)
我创建了一个虚拟变量(在 Python 中),seo
,如果另一列的值大于 0,它的值为 1,如下面的代码所示。
df['seo'] = (df['amount'] > 0).astype(int)
我想做的是创建第二个虚拟变量,past_seo
,如果某个特定公司的 seo
虚拟变量在任何历史时间为 1,则它的值为 1。
作为参考,我的数据集包含每月公司数据并包含公司标识符变量 (6_cusip
)。
我试图做的是按 6_cusip
和 date
对数据集进行分组,然后“向前填充”seo
虚拟变量。但是,我无法让它工作。
下面的代码显示了我的数据集中前 20 个观察值的示例。如图所示,观察结果均来自同一家公司。我想要做的是创建一个新列,将 seo
列中的“1”填充到属于同一公司的所有后续观察。
{'date': {0: '1994-05',
1: '1994-06',
2: '1994-07',
3: '1994-08',
4: '1994-09',
5: '1994-10',
6: '1994-11',
7: '1994-12',
8: '1995-01',
9: '1995-02',
10: '1995-03',
11: '1995-04',
12: '1995-05',
13: '1995-06',
14: '1995-07',
15: '1995-08',
16: '1995-09',
17: '1995-10',
18: '1995-11',
19: '1995-12'},
'6_cusip': {0: '00077R',
1: '00077R',
2: '00077R',
3: '00077R',
4: '00077R',
5: '00077R',
6: '00077R',
7: '00077R',
8: '00077R',
9: '00077R',
10: '00077R',
11: '00077R',
12: '00077R',
13: '00077R',
14: '00077R',
15: '00077R',
16: '00077R',
17: '00077R',
18: '00077R',
19: '00077R'},
'seo': {0: 0,
1: 0,
2: 0,
3: 0,
4: 0,
5: 0,
6: 0,
7: 0,
8: 0,
9: 0,
10: 0,
11: 0,
12: 0,
13: 0,
14: 0,
15: 1,
16: 0,
17: 0,
18: 0,
19: 0}}
如果您有任何建议,请告诉我,谢谢!
我认为这应该可行:
df["past_seo"] = df.groupby("6_cusip").seo.cumsum().gt(0).astype(int)
基本上,对每个组的 seo 进行累积求和,如果大于 1
则标记为 true 并转换为整数。
输出:
date 6_cusip seo past_seo
0 1994-05 00077R 0 0
1 1994-06 00077R 0 0
2 1994-07 00077R 0 0
3 1994-08 00077R 0 0
4 1994-09 00077R 0 0
5 1994-10 00077R 0 0
6 1994-11 00077R 0 0
7 1994-12 00077R 0 0
8 1995-01 00077R 0 0
9 1995-02 00077R 0 0
10 1995-03 00077R 0 0
11 1995-04 00077R 0 0
12 1995-05 00077R 0 0
13 1995-06 00077R 0 0
14 1995-07 00077R 0 0
15 1995-08 00077R 1 1
16 1995-09 00077R 0 1
17 1995-10 00077R 0 1
18 1995-11 00077R 0 1
19 1995-12 00077R 0 1
我创建了一个虚拟变量(在 Python 中),seo
,如果另一列的值大于 0,它的值为 1,如下面的代码所示。
df['seo'] = (df['amount'] > 0).astype(int)
我想做的是创建第二个虚拟变量,past_seo
,如果某个特定公司的 seo
虚拟变量在任何历史时间为 1,则它的值为 1。
作为参考,我的数据集包含每月公司数据并包含公司标识符变量 (6_cusip
)。
我试图做的是按 6_cusip
和 date
对数据集进行分组,然后“向前填充”seo
虚拟变量。但是,我无法让它工作。
下面的代码显示了我的数据集中前 20 个观察值的示例。如图所示,观察结果均来自同一家公司。我想要做的是创建一个新列,将 seo
列中的“1”填充到属于同一公司的所有后续观察。
{'date': {0: '1994-05',
1: '1994-06',
2: '1994-07',
3: '1994-08',
4: '1994-09',
5: '1994-10',
6: '1994-11',
7: '1994-12',
8: '1995-01',
9: '1995-02',
10: '1995-03',
11: '1995-04',
12: '1995-05',
13: '1995-06',
14: '1995-07',
15: '1995-08',
16: '1995-09',
17: '1995-10',
18: '1995-11',
19: '1995-12'},
'6_cusip': {0: '00077R',
1: '00077R',
2: '00077R',
3: '00077R',
4: '00077R',
5: '00077R',
6: '00077R',
7: '00077R',
8: '00077R',
9: '00077R',
10: '00077R',
11: '00077R',
12: '00077R',
13: '00077R',
14: '00077R',
15: '00077R',
16: '00077R',
17: '00077R',
18: '00077R',
19: '00077R'},
'seo': {0: 0,
1: 0,
2: 0,
3: 0,
4: 0,
5: 0,
6: 0,
7: 0,
8: 0,
9: 0,
10: 0,
11: 0,
12: 0,
13: 0,
14: 0,
15: 1,
16: 0,
17: 0,
18: 0,
19: 0}}
如果您有任何建议,请告诉我,谢谢!
我认为这应该可行:
df["past_seo"] = df.groupby("6_cusip").seo.cumsum().gt(0).astype(int)
基本上,对每个组的 seo 进行累积求和,如果大于 1
则标记为 true 并转换为整数。
输出:
date 6_cusip seo past_seo
0 1994-05 00077R 0 0
1 1994-06 00077R 0 0
2 1994-07 00077R 0 0
3 1994-08 00077R 0 0
4 1994-09 00077R 0 0
5 1994-10 00077R 0 0
6 1994-11 00077R 0 0
7 1994-12 00077R 0 0
8 1995-01 00077R 0 0
9 1995-02 00077R 0 0
10 1995-03 00077R 0 0
11 1995-04 00077R 0 0
12 1995-05 00077R 0 0
13 1995-06 00077R 0 0
14 1995-07 00077R 0 0
15 1995-08 00077R 1 1
16 1995-09 00077R 0 1
17 1995-10 00077R 0 1
18 1995-11 00077R 0 1
19 1995-12 00077R 0 1