1

关于在我正在使用的季度 Pandas DataFrame 中创建 Dummies,我基本上有 3 个相关问题。第一个是:如何创建一个“虚拟”变量,将每个公司 ID 的最后四个季度设置为 1?我想产生如下相同的结果:

Firm    Quarter     Dummy
A       2017-03-31  1
A       2016-12-31  1
A       2016-09-30  1
A       2016-06-30  1
A       2016-03-31  0
A       2015-12-31  0
A       2015-09-30  0
A       2015-06-30  0
A       2015-03-31  0
B       2009-06-30  1
B       2009-03-31  1
B       2008-12-31  1
B       2008-09-30  1
B       2008-06-30  0
B       2008-03-31  0
B       2007-12-31  0
B       2007-09-30  0
B       2007-06-30  0
.
.
.
Z       .           .
Z       .           .
Z       .           .

我的第二个问题是:如何创建一个“虚拟”变量,将四个季度设置为 1,最后一个季度后一年(给定每个公司最后一个季度的不同日期)?如下面的DataFrame:

Firm    Quarter     Dummy
A       2017-03-31  0
A       2016-12-31  0
A       2016-09-30  0
A       2016-06-30  0
A       2016-03-31  1
A       2015-12-31  1
A       2015-09-30  1
A       2015-06-30  1
A       2015-03-31  0
B       2009-06-30  0
B       2009-03-31  0
B       2008-12-31  0
B       2008-09-30  0
B       2008-06-30  1
B       2008-03-31  1
B       2007-12-31  1
B       2007-09-30  1
B       2007-06-30  0
.
.
.
Z       .           .
Z       .           .
Z       .           .

最后,关于上一张表,我如何摆脱第一个 Dummy = 1 之前的前四个季度(Dummy = 0),并在每个公司 ID 的最后一个 Dummy = 1 之后保留 dummy = 0 的季度?,得到一个最终的DataFrame,如下所示:

Firm    Quarter     Dummy
A       2016-03-31  1
A       2015-12-31  1
A       2015-09-30  1
A       2015-06-30  1
A       2015-03-31  0
B       2008-06-30  1
B       2008-03-31  1
B       2007-12-31  1
B       2007-09-30  1
B       2007-06-30  0
.
.
.
Z       .           .
Z       .           .
Z       .           .

非常感谢您的帮助!!

4

1 回答 1

1

对于每家公司,如果我们将最后一个季度编号为 1,倒数第二个季度编号为 2,以此类推,那么您的问题只是一个过滤游戏:

  • 分配了所有宿舍 1-4 Dummy = 1。其余为 0
  • 所有宿舍 5-8 被分配Dummy = 1。其余为 0。并且只取 ​​5 - 9 个季度。

代码:

s = df.sort_values('Quarter', ascending=False).groupby('Firm').cumcount().add(1).sort_index()

result1 = df.assign(Dummy=np.where(s.between(1, 4), 1, 0))
result2 = df.assign(Dummy=np.where(s.between(5, 8), 1, 0))[s.between(5, 9)]
于 2020-08-19T18:43:06.883 回答