{cdm>使用以下内容:
url='https://raw.githubusercontent.com/108michael/ms_thesis/master/crsp.csv'
df=pd.read_csv(url)
df.head()
feccandid fec.dyn feccf cid date_crsp catcode amtsum
0 S8VT00018 NaN NaN N00000534 2005 J2100 2.1
1 S8VT00018 NaN NaN N00000534 2005 L1200 5.0
2 S8VT00018 NaN NaN N00000534 2005 J7300 0.0
4 S8NM00127 0.561 0.382 N00015616 2006 G2900 2.5
5 S8NJ00350 -0.329 NaN N00000854 2005 LG000 7.5
我想将amtsum
值按年份延迟。下面的代码显示了我如何派生amtsum
,并深入了解了我所期望的结果的性质:
我尝试使用以下代码获取滞后值:
crsp['amtsumlag.1']=crsp.groupby(['date_crsp','catcode', 'cid'])['amtsum'].shift(1)
这就回来了
feccandid fec.dyn feccf cid date_crsp catcode amtsum amtsumlag.1
0 S8VT00018 NaN NaN N00000534 2005 J2100 2.1 NaN
1 S8VT00018 NaN NaN N00000534 2005 L1200 5.0 NaN
2 S8VT00018 NaN NaN N00000534 2005 J7300 0.0 NaN
4 S8NM00127 0.561 0.382 N00015616 2006 G2900 2.5 NaN
5 S8NJ00350 -0.329 NaN N00000854 2005 LG000 7.5 NaN
由于我的date_crsp
范围是从2005年到2014年,我预计2005年的范围是{
您需要研究一下您的
.groupby()
逻辑。在结果
^{pr2}$大多数组只有一个值,所以没有太多的值可以改变。不出所料
结果:
例如,如果您想
.shift()
,那么您可能不想在.groupby()
中使用它,那么每个组只包含一年。人们期望在.groupby()
中看到唯一的groupid
变量,理想情况下是DateTimeIndex
,或者是排序的DataFrame
。所以.sort_values('date_crsp')
可能是个好主意。在取而代之的是:
如果没有足够的数据来了解你试图滞后的群体的身份,很难提供更具体的答案。在
如果您想将年份转换为一个,请准备一个新的年份列:
然后按
^{pr2}$['next_year', 'catcode', 'cid']
而不是['date_crsp', 'catcode', 'cid']
分组:相关问题 更多 >
编程相关推荐