我用下面的DataFrame
工作創造一個滯後柱:熊貓:與分組數據
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)
這將返回
:crsp['amtsum']=crsp[['date_crsp', 'cid', 'catcode', 'amount']].\
groupby(['date_crsp', 'catcode','cid']).amount.transform('sum')
crsp['amtsum'] = crsp['amtsum']/1000
crsp.drop(['amount'], axis=1, inplace=True)
crsp.drop_duplicates(inplace=True, keep='first')
我曾嘗試使用下面的代碼來獲取滯後值嘗試
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年的NaN
,但不是2006年。我也選擇d只能在2005年後才能獲得相同的結果。有沒有人有關於如何解決這個問題的線索?
感謝您的意見和建議:
通過['next_year', 'catcode', 'cid']
而不是['date_crsp', 'catcode', 'cid']
,然後GROUPBY 。我認識到沒有獨特的索引是一個問題。不幸的是,這不是一個「正常」的數據框。我搞砸了一些不同的想法,即根據'date_crsp'創建一個'date_crsp_lag'來查看是否可以工作。 –
不客氣,增加了另一個例子。 – Stefan